2

我試圖每60秒運行一次cpu激烈的任務。我使用AlarmManager用的PendingIntent,`android遠程進程(receiver)快速死亡

Intent intent = new Intent(MainActivity.this,AlarmReciever.class); 
    PendingIntent pi=PendingIntent.getBroadcast(this, 0, intent, 0); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), period, pi); 

的AlarmReciever.class使用某些第三方二進制文件進行一些密集處理,它需要至少12秒的時間完成(當同一被作爲一個單一的活性進行測試跑)。 但是當我像PendingIntent一樣運行時,我看到遠程進程在啓動後的幾秒鐘內死亡。我得到這個錯誤

03-03 03:09:45.417: INFO/ActivityManager(109): Start proc com.am:remote for broadcast com.am/.AlarmReciever: pid=7940 uid=10052 gids={1015} 

03-03 03:09:55.375: WARN/ActivityManager(109): Timeout of broadcast BroadcastRecord{40a1ee80 null} - [email protected], started 10003ms ago 

03-03 03:09:55.375: WARN/ActivityManager(109): Receiver during timeout: ResolveInfo{40ae3380 com.am.AlarmReciever p=0 o=0 m=0x0} 

03-03 03:09:56.105: ERROR/ActivityManager(109): ANR in com.am:remote 

03-03 03:09:56.105: ERROR/ActivityManager(109): Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) } 

03-03 03:09:56.105: ERROR/ActivityManager(109): Load: 1.44/1.42/1.29 

在Logcat中。它說

Reason: Broadcast of Intent { flg=0x4 cmp=com.am/.AlarmReciever (has extras) } 

但我沒有任何額外的意圖。但將來我會想要放置一些東西。

難道有人會幫助我理解爲什麼它如此快速地關閉以及只有在完成任務後才能完成進程才能死亡。

清單列出這樣

<receiver android:process=":remote" android:name="AlarmReciever"></receiver> 

增加,我已經試過所以在這個answer提供的解決方案,但仍然沒有運氣

回答

1

終於拿到了自己的答案,

BroadcastReceiver對象只有在調用 onReceive(Context,Intent)期間有效的 有效。一旦您的 代碼從此函數返回,則 系統會認爲該對象已完成且不再處於活動狀態,即 。

源:click here