0

Android の起動時に開始するサービスを実装しています。これは、近くの Bluetooth デバイスを 10 分ごとにスキャンすることになっています。デバイスが検出されると、いくつかの作業が行われます。また、この定期的なスキャンは、デバイスがオンになっている間ずっと実行する必要があります。TimerTask をスケジュールしようとしていますが、使用方法がわかりません。TimerTask の run メソッドでコードを記述する代わりに、このサービスを開始して、サービスに作業を任せるべきだと思いますか? これが私の問題を解決する最も簡単な方法のようですが、TimerTask は java.util の一部であり、Android のクラスの 1 つではありません。

Android の AlarmManager を見つけました。私はそれを使うべきですか?サービスを開始できますか?


これまでのところ私はこれを持っていますが、助けが必要です:

クラス Timer は Service を拡張します
{
    プライベート ハンドラー myHander;

Runnable r = new Runnable()
{
    run()
    {
        startService(new Intent(Timer.this.getApplicationContext() ,MyService.class));

myHandler.postDelayed(r,10 分); } }

onCreate()
{   
    myHandler=new MyHandler();

}   

onStartCommand()
{
    //Do the bluetooth work.

r.run(); }

onDestroy() { super.onDestroy(); myHandler.removeCallback(r); }

} クラス MyService は Service { } を拡張します

申し訳ありませんが、ここでの書式設定の仕組みがわかりません。

サービスで onDestroy() をオーバーライドする必要がありますか? どこで stopService() を使用しますか?

4

1 に答える 1

0

必要がある:

  1. アクティビティの 1 つから、および/またはデバイスの起動後に開始されるサービスを記述します。
  2. onStart/のサービスでは、定期的な更新onStartCommandを使用してスケジュールする必要があります。HandlerAlaramManager

この場合 のHandlerとの違いは次のとおりです。デバイスがディープ スリープ状態のときは実行されませんが、デバイスをウェイクアップしてコードを実行するように構成できます。AlarmManagerHandlerAlaramManager

Handler簡単で、デバイスが起動しているときにコードを実行するだけでよいと言ったので、 を使用することをお勧めします。

もう1つ、Handler余分なスレッドを使用しませんTimerTask。そして、これは Android でタイマーのみのスレッドを浪費する悪い習慣と見なされます。

を使用してタスクを繰り返す方法のサンプル コードは、次のHandler場所にあります: Repeat a task with a time delay? .

于 2011-07-10T08:23:10.153 に答える