9

onCreate では、毎分繰り返すタスクを実行します。ここで私はそれを行う方法:

myTimer = new Timer();
    int delay = 30000;   // delay for 30 sec.
    int period = 600000;  // repeat every 60 sec.
    doThis = new TimerTask() {
      public void run() {

                     Log.v("TImer","repeated");
                     wv.reload();

      }
    };

    myTimer.scheduleAtFixedRate(doThis, delay, period);

そのコードはすべて onCreate にあります。そのため、アプリが画面から消えると、タイマー スチールが実行され、アプリが破棄されない限り停止しないことを logcat で確認できます。だから、onPause活動の中で私は電話をかけmyTimer.cancel();ましたが、役に立ちませんでした。アプリが画面に表示されていなくても、logcat で更新を確認できます。では、どのように停止しtimerTaskますか?

4

3 に答える 3

7

ここにあなたのコードが私のファイルに入れられています.delayとperiodの値が微調整されているので、それほど長く待つ必要はありません. アプリを実行します。LogCat にメッセージが表示されます。Galaxy S3のホームボタンを押します。その後、メッセージは LogCat で停止します。

public class MainActivity extends Activity {
    Timer myTimer;
    TimerTask doThis;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myTimer = new Timer();
        int delay = 0;   // delay for 30 sec.
        int period = 1000;  // repeat every 60 sec.
        doThis = new TimerTask() {
          public void run() {

                         Log.v("TImer","repeated");

          }
        };

        myTimer.scheduleAtFixedRate(doThis, delay, period);
    }

    @Override
    protected void onPause() {
        myTimer.cancel();
        super.onPause();
    }
}
于 2013-01-10T07:48:17.760 に答える
0

スレッドは既に送信されているため、最後にもう一度実行される可能性があります。onLoad で変数を true に設定し、onPause で変数を false に設定します。次に、タイマー タスクで、変数が true の場合にのみコードを実行します。

ただし、新しい if ステートメントの外でログに書き込みます。実際に最後に 1 回だけ実行している場合は、それが解決策になる可能性があります。ただし、onPause の後で何度も何度も実行している場合は、私の解決策を採用しないでください。

于 2013-01-10T07:23:55.140 に答える