簡體   English   中英

在API <21上收到SMS時執行長時間運行的操作

[英]Perform long running operations when receiving SMS on API < 21

我正在構建一個應用程序,該應用程序將偵聽傳入的SMS消息,執行一些可能會長時間運行的操作,並在滿足某些條件時發回答復。

我已經使用BroadcastReceiver使偵聽部分正常工作,但是我不確定如何/在何處執行可能長時間運行的操作。 Android開發人員文檔指出

在onReceive()之后,系統可以隨時終止進程以回收內存,這樣做可以終止在進程中運行的生成線程。 為了避免這種情況,您應該調用goAsync()(如果您需要更多時間在后台線程中處理廣播),或者使用JobScheduler從接收方安排JobService,以便系統知道該進程繼續執行活動工作。

並且:

在接收者的onReceive()方法中調用goAsync()並將BroadcastReceiver.PendingResult傳遞給后台線程。 從onReceive()返回后,這可使廣播保持活動狀態。 但是,即使采用這種方法,系統也希望您能夠非常快地完成廣播(不到10秒)。 它的確使您可以將工作移至另一個線程,以避免使主線程出現故障。

此外, JobScheduler在API <21上不可用。

那么如何在API 16-20上實現呢?

只需在您的BroadcastReceiver啟動Service即可進行長時間運行的操作並將結果發送回去。 您可以使用IntentService或常規Service

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM