Android удаленный процесс (приемник) быстро умирает

Я пытаюсь выполнять интенсивные задачи процессора каждые 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 ответ

Решение

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

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

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

Другие вопросы по тегам