我有一些關於Android的BroadcastReceiver
的設計問題。Android BroadcastReceiver:線程模型和非重疊
我的情況如下:連接某個WiFi網絡時,檢測是否有強制門戶,如果有,則對其進行身份驗證。該場景涉及網絡I/O並需要幾秒鐘才能完成(尤其是當您需要使用密碼等待SMS時)。
通過調試BroadcastReceiver
Wifi狀態更改,我發現它在應用程序的主線程上調用。這是幾分鐘後我不知道的事情。我是這樣說的,而不是問,因爲這個問題也是我發現的結果。
在無線驗證階段,我應該處理用戶突然斷開連接(例如由於熱點故障,用戶走出範圍......)並重新連接的情況,由避免兩個廣播重疊和可能取消認證最終失敗。
當我發現BroadcastReceiver在主線程中執行後,我得出結論,我需要一個AsyncTask
來執行網絡I/O,但隨意提出其他想法。
問題是:如果連續廣播在長時間運行的任務中間被觸發,我該如何阻止?事實上,AsyncTask
可以被取消,但是我怎樣才能存儲一個AsyncTask
的共享實例,以便從另一個BroadcastReceiver中取消它,而不會使我的生活過於複雜?
Android是否BroadcastReceiver
s 事實上的單身人士還是Android會在每次需要播放新廣播時創建一個新的已聲明接收器實例嗎?
我在清單 – 2013-04-11 20:23:48
中註冊了我的接收器「可能您不會」停止該操作「,因爲您很可能無法以任何有意義的意義」停止「您的操作,而不會使您處於不確定狀態數據。」 - 幸運的是在我的情況下,我可以取消註冊SMS接收器(從代碼)並殺死線程,但是您的評論在一般情況下是正確的 – 2013-04-11 20:37:52