1

特定の時間にアクティビティを起こしたい。そうするために、私は (また) AlarmManager を Boot complete BroadcastReceiver に登録しました。

私の知る限り、アクティビティを起こすためにバックグラウンドで生き続けることができるのは Service だけです。アクティビティと BroadcastReceiver は、非アクティブ時に終了する可能性があります。

私が持っている次のコードはサービスを実行していません。ただし、動作しているようです(24時間後に起動してもアラームが動作します)。これは安全ですか?それとも、サービスを開始する必要がありますか? これが安全に使用できる場合、この背後にあるロジックは何ですか? BroadcastReceiver によって作成された AlarmManger が Android ライフサイクル マネージャーによって破棄されないのはなぜですか?

public class BootReceiver extends BroadcastReceiver {

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

        if(Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            registerAlarm(context);
        }
    }

    private void registerAlarm(Context context)
    {
        Intent intent = new Intent(context, Alarm.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager am =(AlarmManager)context.getSystemService(Activity.ALARM_SERVICE);
        long nextAlarm = System.currentTimeMillis() + 10000; //Some time later.
        am.set(AlarmManager.RTC_WAKEUP, nextAlarm, pendingIntent);
    }
}
4

2 に答える 2

3

これは安全ですか?

AlarmManagerどのようなものを使用するかは気にしませんPendingIntent

ユーザーはどこからともなく表示されるアクティビティを評価する場合としない場合がありますが、それは別の問題です。

私の知る限り、アクティビティを起こすためにバックグラウンドで生き続けることができるのは Service だけです。

サービスは永遠に続くわけではありません。

アクティビティと BroadcastReceiver は、非アクティブ時に終了する可能性があります。

いいえ。プロセスは、そのプロセス内のすべてのコンポーネントを含む「非アクティブで終了」する可能性があります。

BroadcastReceiver によって作成された AlarmManger が Android ライフサイクル マネージャーによって破棄されないのはなぜですか?

AlarmManagerアプリではなく、OS によって管理されるシステム サービスであるためです。

于 2013-03-05T18:54:26.140 に答える
0

サービスはいつでも Android によって強制終了される可能性があります。Android で繰り返しタスクまたは実行時間の長いタスクをトリガーするために使用できるオプションの詳細な分析については、このスレッドを参照してください - Android で繰り返しタスクをスケジュールする

于 2013-03-05T18:52:07.327 に答える