0

asynctask があり、たとえば 60 秒後にキャンセルされるようにしたいと考えています。whileステートメントの中でそれをしなければならないと思いますが、時間を数える方法がわかりません。

4

3 に答える 3

0

AsyncTaskを開始した後、それへの参照を保持し、60 秒後におそらく UI Thread で cancel を呼び出しますHandler。メソッド内では、 truedoInBackgroundを返す場合に確実に返す必要isCancelledがあります。次のスニペットがお役に立てば幸いです。

public class MyActivity extends Activity {
    private Handler mHandler;
    private AsyncTask<?, ?, ?> mTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mHandler = new Handler();
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        mTask = new MyCustomTask();
        mTask.execute(1, 2, 3);
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mTask.cancel();
            }, 60L);
    }
}

そして、カスタム タスク内で:

public class MyCustomTask extends AsyncTask<Integer, Float, String> {
    @Override
    protected String doInBackground(Integer... params) {
        String output = "";
        for (Integer i : params) {
            // Check status for each param
            if (isCancelled()) {
                return output;
            }

            ...
         }
    }

    @Override
    protected void onCancelled(String result) {
        // This bit runs on the UI thread
        ...
    }
于 2013-09-02T19:47:50.590 に答える