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). Как только ваш код возвращается из этой функции, система считает, что объект завершен и больше не активен.
источник: нажмите здесь