2011-09-18 74 views
12

那麼,在android中,在做什麼在broadcastReceiver調用BroadcastReceiver另一個服務之間的區別是什麼?我認爲他們都在後臺運行,對不對?BroadcastReceiver與服務

其實,我有什麼做的是:

在日常生活中的某些時間,下載用戶事件(例如:上午9:00吃早餐 )的數據庫,並建立AlarmManager顯示 有關事件的通知。

現在我設置了一個報警管理器來完成上述任務。我感到困惑的是,我應該直接在BroadcastReceiver中完成此操作還是在BroadcastReceiver中調用服務來完成此操作。

謝謝。

回答

16

你應該在一個BroadcastReceiver儘可能做盡可能少的處理,因爲(從Android Blog報價)

當處理一個廣播,應用程序被賦予一組固定的 時間(目前10秒),在其中進行工作。如果在那段時間內沒有完成 ,則應用程序被認爲是 行爲不當,並且其進程立即被拋入後臺 狀態以在需要時被殺死以用於存儲器。

5

如果您的操作需要更長的時間(連接到互聯網可能會花費一些時間),您最終應該從接收方調用服務。廣播接收機受限於最長的時間,他們必須完成。

流程生命週期

當前正在執行一個BroadcastReceiver的方法(即, 當前運行在其的onReceive(上下文,意圖)方法的代碼) 被認爲是前臺進程,將是除了存在極大的記憶壓力的情況外,系統通過 繼續運行。

從onReceive()返回後,BroadcastReceiver不再是 活動狀態,其託管過程與其中運行的其他應用程序組件一樣重要。尤其是 重要,因爲如果該過程僅託管 BroadcastReceiver(對於用戶具有 從未或最近未與之交互過的應用程序的常見情況),則在從 返回onReceive()時,系統將認爲其進程是空和 積極殺死它,使資源可用於其他更多 重要的過程。

這意味着,對於長時間運行的操作,你會經常一起使用 服務與廣播接收器,以保持含 過程積極爲您的操作的全部時間。

來自:BroadcastReceiver

相關問題