2

一般に、私は常に6秒ごとにインテントをアクティビティに送信し、BroadcastReceiver受信するたびにタイマーを更新するサービスを持っています。

偶然にも、しばらくすると (これはランダムです)、特定の受信機が機能しなくなることがわかりました。

OnPauseunregisterはそれをonResume再登録します。

また、これは任意のデバイスと Android バージョンでランダムに発生します。

Web で調査したところonReceive、レシーバーが Android によって殺される準備ができた後、私のものはインテントを取得し続けていることがわかりました。

「レシーバーのライフサイクル

BroadcastReceiver オブジェクトは、onReceive(Context, Intent) への呼び出しの間のみ有効です。コードがこの関数から戻ると、システムはオブジェクトが終了し、アクティブではなくなったと見なします。"

参考までに、アクティビティ内でこのように宣言しました

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context arg0, Intent intent) {

        Log.i("Intent received", "+_ " + intent.getAction());
        if (intent.getAction().equals(TEST)) {
        //do sth
        } else {

        //do sth else
        }


    }
}

時間をかけて読んでくれてありがとう:)。

私は自分のマニフェストに何も宣言しません。logcat に関しては、それが発生した瞬間に電話をしなければなりません。このサービスは、1 つの非同期タスクの後の単純な送信ブロードキャストです。私が行った最後のテストは、送信された beeing をログに記録することによって、サービスからのコードが実行されていることを確認することでした。そして、サービスは続けられました。

私は今コードを書くことから離れていますが、非常に単純なので仕方がないと思います。タナクス

4

1 に答える 1

0

まあ、私はまだ理解することができましたが、私は私の問題の解決策を見つけました

タイマーは現在アクティビティにあり、受信者はイベントを送信していますが、10000回試行した後、END EVENTをトリガーしたいと考えています。彼が機能しなかったため、受信者はそれを取得できませんでしたが、今ではフラグ new_task と clear_top を常に使用して、同じアクティビティのエクストラを使用してインテントを開始します。

受信機が動作しているかどうかに関係なく、サービスが正常であるため、特定のアクティビティを開始し、END EVENT を擬似的に表示します。

PS:: この動作は常にトリガーされるわけではありませんが、場合によってはトリガーされます。だから今、私は大丈夫です。

私が理解していない場合は、コメントして何でも聞いてください。ありがとう

于 2013-03-06T11:04:11.927 に答える