0

私はアプリケーションを開発しています.1分ごとにデバイスの場所をサーバーに送信しています. ここでは Handler を使用してタスクをスケジュールしています。ユーザーがSTOPボタンをクリックすると、ハンドラーはその実行を停止する必要があります。私はこれを達成することができません。以下の私のコードを見つけてください。

    public void callSpecficTime() {

    timer = new Timer();
    doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {

            handler.post(new Runnable() {
                public void run() {
                    try {
                        Log.e("TImeOnSchedule", String.valueOf(inTime));
                        if(inTime==5)
                        {
                             new PostDataAsyncTask().execute();
                         }


                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer.schedule(doAsynchronousTask, 0, 60000);
}

StopTaskコード:

    public void stopTask(){

    if(doAsynchronousTask!=null){
        Log.d("TIMER", "timer canceled");
        handler.removeCallbacks(doAsynchronousTask);
     // timer.cancel();
        doAsynchronousTask.cancel();
    }

}

試してみましたがstopServiceremoveCallbacksうまくいきませんでした。誰でも私にこれに対する解決策を提供できますか?

更新しました

 public void onClickButton(View v)
{
    if(v.getId()==R.id.IBstart)
    {
        callAsynchronousTask();
        callSpecficTime();
    }
    else if(v.getId()==R.idIBstop)
    {
       stopTask();
    }
}

これは ** callAsynchronousTask()** です

 public void callAsynchronousTask() {
    new PostDataAsyncTask().execute();
}

データを2回投稿しています。最初は、ユーザーが [ START ] ボタンをクリックしてから、タイマーを開始して 1 分ごとに実行するときです。

4

2 に答える 2

0
  1. 最初に TimerTask を停止する必要があります:Timer.Cancel()Timer.Purge().
  2. handler.removeCallbacks(doAsynchronousTask);に変更できますremoveCallbacksAndMessages(null)

編集:

スケジュール コードを見てください: timer.schedule(doAsynchronousTask, 0, 60000);--> つまり、taskすぐに開始し、60 秒後にそれを繰り返したことを意味します。
リスナーを見ると、onClickButtonすぐに実行されるタスクが 2 つあります。その結果、実行されたタスクをキャンセルすることはできません。これを回避するには、次のように呼び出します。 timer.schedule(doAsynchronousTask, 60000, 60000);

于 2016-04-04T10:45:06.323 に答える