Android удаленный процесс (приемник) быстро умирает - PullRequest
2 голосов
/ 03 марта 2011

Я пытаюсь выполнять интенсивные задачи процессора каждые 60 секунд.Я использую AlarmManager с PendingIntent, `

    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} - receiver=android.os.BinderProxy@4074f798, 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>

чтобы добавить, я попробовал решение, приведенное в этом ответе на SO, но все еще не повезло

1 Ответ

1 голос
/ 12 марта 2011

Наконец-то получил ответ сам:

Объект BroadcastReceiver действителен только на время вызова onReceive (Context, Intent).Как только ваш код возвращается из этой функции, система считает, что объект завершен и больше не активен.

источник: нажмите здесь

...