2

Asynctask Demo の作業を開始しています。私が欲しいのは、「Androidデバイスの戻るボタンを押したときに、アプリで実行されているタスクを停止したい」です

onBackPressed() メソッドでこのことを設定しましたが、この後、Logcat タスクは停止しません。

私はどこで間違いを犯していますか?

public class Activity1 extends Activity {

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

    new CountDownTask().execute();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
@Override
public void onBackPressed() {
    super.onBackPressed();
    new CountDownTask().cancel(true);
}

private class CountDownTask extends AsyncTask<Void, Integer, Void>{
    @Override
    protected void onPreExecute() {
        TextView tvCounter = (TextView) findViewById(R.id.tv_counter);
        tvCounter.setText("START");
    }

    @Override
    protected Void doInBackground(Void... params) {
        for(int i=15;i>=0;i--){
            try {
                Thread.sleep(1000);
                publishProgress(i);
                Log.e("Aka", String.valueOf(i));
                if(isCancelled()){
                    break;
                }
            } catch (InterruptedException e) {
            }
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        TextView tvCounter = (TextView) findViewById(R.id.tv_counter);

        tvCounter.setText( Integer.toString(values[0].intValue()));         
    }

    @Override
    protected void onPostExecute(Void result) {
        TextView tvCounter = (TextView) findViewById(R.id.tv_counter);
        tvCounter.setText("DONE");          
    }       
}

}

4

2 に答える 2

7

問題はこの行にあります

new CountDownTask().cancel(true);

新しい CountDownTask を作成してキャンセルしています。Asynctask の既存のインスタンスをキャンセルします。

例えば

private CountDownTask cT;  // declare as member

のように始める

ct = new CountDownTask();
ct.execute();

のようにキャンセルします

ct.cancel(true);
于 2013-05-29T07:19:29.183 に答える
1

タスクを再初期化しています。代わりに、タスクの参照を作成し、次のようにそのタスクを停止します。

            public class Activity1 extends Activity {

              CountDownTask countDownTask = new CountDownTask();

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

countDownTask.execute();
             }

        @Override
          public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
         return true;
            } 
          @Override
         public void onBackPressed() {
            super.onBackPressed();
         countDownTask.cancel(true);
           }
于 2013-05-29T09:19:01.047 に答える