2011-07-10 5 views
0

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

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


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

class Timer extends Service 
{ 
    private Handler 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では、サービス {}

を拡張して申し訳ありませんが、私は、フォーマットがここでどのように機能するかを理解していません。

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

答えて

0

あなたのことを行う必要がありますおよび/またはデバイスの後にあなたの活動の一つから開始されます

  1. 書き込みサービスが起動しています。
  2. onStart/onStartCommandのサービスでは、HandlerまたはAlaramManager定期更新を使用してスケジュールする必要があります。

この場合HandlerAlarmManagerの違いがあることになります:デバイスは深い眠りにあるときにデバイスを起動し、あなたのコードを実行するためにAlaramManagerを設定することができながらHandlerは、実行されません。

私はHandlerと一緒に行くことをお勧めします。その方が簡単です。デバイスが起きているときにコードを実行する必要があるからです。

もう1つ、Handlerは余分なスレッドを使用しませんが、TimerTaskはしません。そして、これはAndroid用の悪い練習とみなされ、タイマー用のスレッドで無駄になります。

Handlerを使用してタスクを繰り返す方法のコード例は、Repeat a task with a time delay?です。

+0

Handlerが自分のタイミングを管理できるとは思わなかった。私はこれをもう少し調べなければならないでしょう。私は唯一のクラスから別のクラスにメッセージを送ったと思った。 – user817129

+0

さて、HandlerとRunnableを使用します。だから、私はRunnableでrun()メソッドを実装し、私はstartActivity()を呼び出すことができますか?またはサービスの開始方法を教えてください。 – user817129