怎么在BroadcastReceiver(廣播)里做耗時操作芒涡?
? ? 最近剛好遇到一個耗時操作的問題泽篮,因為用到邏輯里面用到了context坊秸,不能在Service直接使用,只好在又開啟了一個BroadcastReceiver选脊,順便分享記錄一下杭抠,希望能夠幫到剛好遇到這樣問題的人。
? ???BroadcastReceiver (廣播)有兩種注冊方式知牌,動態(tài)注冊和靜態(tài)注冊祈争,這里就不詳細(xì)介紹了,一般我們在BroadcastReceiver里的receiver()里面的邏輯操作超過10s會出現(xiàn)內(nèi)存溢出角寸,所以我們一般都會開一個服務(wù)菩混,把耗時操作交給Service。
? ? Service是四大組件之一扁藕,工作是在主線程里面的沮峡,耗時操作一般我們會開一個子線程(new Thread),這里我們沒有new Thread亿柑,直接使用到的是IntentService邢疙。
?????它是Service的子類,首先我們自定義MyService望薄,繼承IntentService,重寫onHandleIntent()疟游,我們可以直接在onHandleIntent()在里面處理耗時操作。
1.當(dāng)按鈕被點(diǎn)擊痕支,發(fā)送廣播
2.然后在自定義的廣播接收器中繼承BroadcastReceiver颁虐,重寫onReceive方法,在onReceive方法里面啟動service
3.定義一個service,繼承IntentService卧须,重寫onHandleIntent()方法另绩,在里面發(fā)送一個廣播,
4.在onReceive里面判斷一下action花嘶,在里面進(jìn)行耗時操作處理
5.以下是我在manifests聲明的廣播和服務(wù)
注意:我們在manifest里面的action要和發(fā)送廣播的action要保持一致