2011-12-20 9 views
0

私は以下のタスクを持っています:10分ごとにインターネットからデータを実行して取得するサービスを作る。私はService + Timerの組み合わせを使用しようとしますが、この場合はサービスを制御できません。サービスのonCreate()メソッドの遅延でTimerTaskを実行し、TimerTask割り込みサービスが停止しない場合)。私は2つのボタンだけが必要です: "サービス開始"と "サービス停止"。この場合の最善の方法は何ですか?助けてくれてありがとう。タイマーで働くためのサービスの仕方は?

+0

AlarmManagerを使用する必要があります。この質問をご覧くださいhttp://stackoverflow.com/questions/1082437/android-alarmmanager –

+0

ありがとうございます。しかし、なぜ私はそれのためのタイマーを使用することはできません? – user1078760

+0

サービスを10分間何もしないでおくことで、ユーザーのメモリを浪費する必要はありません。また、電話がスリープ状態にある場合、タイマーは実行されません。 AlarmManagerを使用することにより、電話機は自動的に10分ごとに起動し、サービスのインターネットダウンロードタスクの実行を呼び出すことができます。 –

答えて

0

よく分かっていると、サービスを中断したときにTimerTaskを停止する方法を知りたいですか? もしそうなら、読んでください。そうでなければ、より良く説明してください。

TimerTaskが(繰り返し実行されるようにスケジュールされていると仮定して)実行を停止するには、cancel()メソッドを呼び出す必要があります。好ましい方法は、外部で設定可能なブールフラグをチェックした後、TimerTask自身がcancel()メソッドを呼び出させる方法です。例えば

class MyTimerTask extends TimerTask() { 

    private boolean alive = true; 

    public void run() { 
     if (alive) { 
      // do something 
     } else { 
      cancel(); 
     } 
    } 

    public void stop() { 
     alive = false; 
    } 
} 

はその後、それはあなたがあなたのサービスを中断するとき、あなただけのMyTimerTask.stopを呼び出す必要があることは明らかです()。

+0

ありがとうございます。私は、サービスのonCreate()メソッドでServiceを実行し、timer(クラスのメンバー)timer.scheduleAtFixedRate(..)を実行します。サービスはサービスのonDestroy()メソッドを実行しますが、タイマーは引き続き動作します。いいです、5分ごとにインターネットサービスをチェックする必要があります。しかし、すでにサービスを停止している場合、どのようにタイマーを止めることができますか?または、5分ごとにWebサービスのチェックをどのように整理できますか? – user1078760

+0

あなたが言っていることから、Timertaskはあなたがサービスを終了した後に生き残るべきです....だから、それはサービスのメンバーであってはなりません。 TimerTaskリファレンスは、常に実行できるクラスにしておいてください。あなたは常にクラスを実行していない場合は、1つを作成します...それのための新しいスレッドを開始する必要があります...あなたがいくつかのデモコードを投稿すれば、再間違っている。 – Renato

1

AlarmManagerを使用する必要があります。この質問はAndroid: How to use AlarmManagerを参照してください。 10分間何もしないであなたのサービスを生かし続けることで、ユーザーのメモリを浪費する必要はありません。また、電話がスリープ状態にある場合、タイマーは実行されません。 AlarmManagerを使用すると、電話機は自動的に10分ごとに起動し、サービスを呼び出してインターネットダウンロードタスクを実行できます。

関連する問題