0

ねえ、他の誰かがBOOT_COMPLETEDインテントがどこからともなく到着することを発見したことがありますか?

androidからBOOT_COMPLETEDインテントを受け取った後にサービスを開始するOnBootRecoverReceiverを作成しました-これまでのところ正常に動作しています...しかし、一部の(まだ追跡できない)イベントでは、再起動がまったくなかったにもかかわらず、そのようなインテントを受け取ります。

誰かがそれについての手がかりを持っていますか、または以前に同じ問題を抱えていましたか?

受信者のマニフェストエントリ:

    <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インテントはどこにも作成されていません

何らかの理由で、サービス(Receiverによって開始されます)が特定のデバイスでしばらく前にクラッシュしました。その後、私たちの親友である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の意図はまったくありません。

これを停止する解決策:Receiverによって作成されたインテントにブールExtraを追加します

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

次に、サービスのonStart(Intent)にいる間に、このブール値のExtraを確認します。

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