1

デバイスに電源が接続されてからN秒後にUI以外のアクションを開始しなければならない場合があります。このアクションは、ユーザーがUIを介して開始することもできます。

ACTION_POWER_CONNECTEDをリッスンするBroadcastReceiverがAndroidManifest.xmlで定義されています。

onStartCommandで必要なアクションを実行するサービスがあります。私の質問は、アクションがブロードキャストによってトリガーされた場合にそのサービスを開始する正しい方法は何ですか?

私は2つのオプションを念頭に置いています:

  1. ワンショットタイマータスク。ただし、ドキュメントによると、BroadcastReceiverから非同期タスクを開始できなかったため、間違っている可能性があると思います。

  2. 再設計サービス:

    • アクションがユーザーによってトリガーされた場合は、 onStartCommandでアクションを開始します
    • タイマータスクを開始し、タイマーショットでアクションを実行します(1と同じロジックですが、サービス内)。アクションがブロードキャストによってトリガーされた場合。

私は2に傾いています。コードが少し複雑になりますが、それは正しい方法にすぎないようです。

-レブ

4

1 に答える 1

1

The correct way is #2. That's because as soon as you leave onReceive application process might be killed. And your TimerTask won't help in such case.

As an alternative solution, use AlarmManager and its set function to schedule pending service intent. This is probably the best solution in your case.

于 2011-07-11T12:39:16.400 に答える