事件驅動開發

2021-06-29 04:05:02 字數 1498 閱讀 4895

最近android的事件驅動開發風靡一時,一夜之間似乎所有人都在搞這個東西,這裡我就記錄一下我是怎麼把我的應用(tt日程管理)重構為事件驅動模式的。

首先呢,最主要的,就是eventbus,github位址,類似的乙個開源專案是otto,github位址,不過我看了好多文章,似乎說otto效能上不如eventbus好。所以我權且使用eventbus吧。

眾所周知的,我們在開發過程中會遇到這樣的問題,我們在後台獲取資料(一般來說是耗時的操作),這時候我們會新起執行緒,在非ui執行緒中獲取資料,然後通過主線程的handler更新ui。所以會有如下**:

new thread(new runnable() 

}).start();

private handler handler = new handler();

};

**看上去還行,但是!如果是在乙個比較大的專案中,每乙個耗時操作都用如上方式,你就會發現很多缺點,比如:

當然,缺點不止於此。

現在,我用eventbus來重構我的應用

ui主要負責顯示部分,service負責處理資料,通知中心負責**通知。

流程為:ui向service傳送資料請求,service經過耗時處理告訴通知中心:資料請求好了,並將請求的資料傳遞給通知中心,通知中心將訊息告訴ui,ui把通知中心**的處理好的資料進行展示。

注:實際上,ui是作為乙個觀察者,而通知中心作為被觀察者

1.service(這裡是指資料處理服務,不是android的服務元件)

public

class serviceprovider

}).start();

}}

2.通知中心

public

class eventcenter

這裡有乙個類,叫做event,事件類,它作為乙個通知的載體而存在

public

class event

public data getdata()

}

3.ui

以activity為例

public

class

mainactivity

extends

activity

@override

protected

void

ondestroy()

public

void

oneventmainthread(event event)

}

在activity生命週期起始位置註冊,在結束位置登出(觀察者模式必須有登出,防止記憶體洩漏),oneventmainthread這個方法為通知中心通知到的方法,當然不一定是這個名稱,其實可以自定義,具體看eventbus原始碼。在這個方法中獲取event攜帶的資料,並重新整理ui。

linux驅動開發擴充套件 輸入事件驅動層原始碼分析

drivers input evdev.c define evdev minor base 64 define evdev minors 32 define evdev buffer size 64struct evdev struct evdev client static struct evde...

驅動python python實現事件驅動

eventmanager事件管理類實現,大概就百來行 左右。encoding utf 8 系統模組 from queue import queue,empty from threading import class eventmanager def init self 初始化事件管理器 事件物件列表...

事件驅動與流程驅動

1 流程驅動 類似 一般就是主動輪詢 在幹活中還要分心 主動去找活幹 這樣有空餘的時間也完全浪費掉了 2 事件驅動 類似 比如公司有乙個oa系統 你幹完活的時候只需要看下oa系統有沒分配給你活 沒有可以幹自己的事 不用擔心還有其他事沒幹完 3者對比 採用警覺式者主動去輪詢 polling 行為取決於...