ホーム > android > AsyncTaskのcancel時の動き

AsyncTaskのcancel時の動き

Android 2.1 update 1 ~ Android 2.3.2
AsyncTaskのcancel(true)を外部から呼んだ場合と、doInBackgroundで呼んだ場合挙動が異なる。
あと、cancelしてもdoInBackgroundは最後まで実行される。


public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

new AsyncTask() {
@Override
protected Void doInBackground(Void… params) {
for (int i = 0, cnt = 10; i < cnt; i++) { publishProgress(i); SystemClock.sleep(1000); if (i == 5) { cancel(true); } } return null; } @Override public void onProgressUpdate(Integer... values) { Log.d(getLocalClassName(), "count "+values[0]); } @Override protected void onCancelled() { Log.d(getLocalClassName(), "onCancelled"); } @Override protected void onPostExecute(Void result) { Log.d(getLocalClassName(), "onPostExecute"); } }.execute(); } } [/java] 結果

count 0
count 1
count 2
count 3
count 4
count 5
onPostExecute
count 6
count 7
count 8
count 9

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

AsyncTask task = new AsyncTask() {
@Override
protected Void doInBackground(Void… params) {
for (int i = 0, cnt = 10; i < cnt; i++) { publishProgress(i); SystemClock.sleep(1000); } return null; } @Override public void onProgressUpdate(Integer... values) { Log.d(getLocalClassName(), "count "+values[0]); } @Override protected void onCancelled() { Log.d(getLocalClassName(), "onCancelled"); } @Override protected void onPostExecute(Void result) { Log.d(getLocalClassName(), "onPostExecute"); } }; task.execute(); SystemClock.sleep(5000); task.cancel(true); } } [/java] 結果

count 0
count 1
count 2
count 3
count 4
onCancelled
count 5
count 6
count 7
count 8
count 9
カテゴリー: android タグ: ,
  1. 2017 年 1 月 3 日 07:24 | #1

    Jag också, jag förstår inte ens hur det gick till. Hur hon kunde hitta min blogg, det inlägget, känna igen en stuga hon aldrig varit i, osv. os.iWinWvn!

  1. トラックバックはまだありません。