2016-09-30 83 views
1

我在一個單獨的類上有一個BroadcastReciever,我在其中一個活動上註冊了接收者,當這個廣播接收者在互聯網連接時觸發。在接收器的onReceive()裏面,我執行從服務器獲取令牌的方法。在BroadcastReceiver的onReceive裏面調用WebServices是否正確?

但是,當我通過文檔,我發現, 「當它在主線程上運行時,您不應該在其中執行長時間運行的操作(在考慮接收器被阻塞並且候選者被殺死之前,系統允許超時10秒)

請幫助我正確的做法。

+0

創建一個線程,向OnReceive()中的線程發送消息並讓線程處理它。 – GPS

+0

onReceive在後臺任務上運行很好 –

回答

0

IMO,在廣播接收器的onReceive方法中調用WebService是完全正確的。我在許多應用程序中完成了它,直到現在我從未遇到任何問題。

Infact在大多數需要頻繁更新服務器的應用程序中使用BroadcastReceiver組件,因爲onReceive方法在Worker線程/任務中運行。

爲了安全起見,您可以將您的WebService超時設置爲小於10秒。另一個實現可以是您可以創建後臺/工作線程,從您的BroadcastReceiver的onReceive向其發送一個令牌,並在該線程內你可以調用你的WebService。

0

不,Android系統可能會殺死您的BroadcastReceiver,以防內存不足。因爲用戶從不或最近不與應用程序進程交互。

當前正在執行BroadcastReceiver的一個進程(也就是說,當前正在其onReceive(Context,Intent)方法中運行代碼)被認爲是前臺進程,並且將由系統保持運行,極端的記憶力。

這意味着一個進程只保存BroadcastReceiver,那麼它可能被認爲是在極端內存壓力情況下的低優先級。

這意味着對於長時間運行的操作,您經常會使用服務與BroadcastReceiver一起使包含進程在整個操作期間保持活動狀態。

Intent intent = new Intent(mContext, MyService.class) 
    intent.setData(Uri.parse(your_url)); 
    mContext.startService(intent); 
相關問題