0

嘿,有没有其他人发现有时 BOOT_COMPLETED 意图会突然出现?

我创建了一个 OnBootRecoverReceiver,它在收到来自 android 的 BOOT_COMPLETED 意图后启动服务 - 到目前为止工作正常......但在某些(但不可追踪的)事件中,即使根本没有重新启动,我也会收到这样的意图。

任何人对此都有线索,或者以前遇到过同样的问题?

接收方的清单条目:

    <receiver android:name=".trigger.OnBootRecoverReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
            <category android:name="android.intent.category.HOME" />  
        </intent-filter>  
    </receiver>`  

收货人代码:

public class OnBootRecoverReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent();
    serviceIntent.setAction("de.android.stuff.trigger.OnBootRecoverService");
    context.startService(serviceIntent);
}

}

如果有人有想法,请随时提供帮助。

4

1 回答 1

0

在这里澄清一下:在任何地方都没有创建 BOOT_COMPLETED 意图

出于某种原因,服务(由接收方启动)前段时间在特定设备上崩溃了。我们的好朋友 android ActivityManager 然后决定重新为上述服务设置动画:

03-16 12:00:02.239: WARN/ActivityManager(2504): Scheduling restart of crashed service de.ukn.hci.android.diary/.trigger.OnBootRecoverService in 5000ms

这当然导致我认为接收器再次被解雇,但是 - 事实证明只是服务重新开始。没有任何 REBOOT 意图。

阻止此问题的解决方案:将布尔 Extra 添加到 Receiver 创建的意图中

serviceIntent.putExtra("isFromReceiver", true);
context.startService(serviceIntent);

然后在服务的 onStart(Intent) 中检查这个布尔额外

    boolean isFromReceiver = intent.getBooleanExtra("isFromReceiver", false);
    if( !isFromReceiver ) {
        return; //just stop starting the service
    }
于 2011-03-16T14:21:35.030 回答