android远程进程(接收器)快速死亡

时间:2011-03-03 08:30:48

标签: android android-intent broadcastreceiver alarmmanager android-pendingintent

我试图每60秒运行一次cpu紧张任务。我正在使用带有PendingIntent的AlarmManager,`

    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>

要添加,我已尝试过此answer中提供的解决方案,但仍然没有运气

1 个答案:

答案 0 :(得分:1)

最终得到了答案,

  

仅限BroadcastReceiver对象   在通话期间有效   onReceive(Context,Intent)。一旦你的   代码从这个函数返回,   系统认为对象是   已完成,不再有效。

来源:click here