2012-09-28 181 views
0

當父活動暫停(onPaused)時,我取消AsyncTask。我正在觀察的是該任務已終止,但從未調用onCancelled的參數化版本。但是,如果將其替換爲無參數onCancelled方法,它將始終按預期調用。AsyncTask:onCancelled(Result)not called

我的代碼:

//In the activity 
    @Override 
    protected void onPause() { 
     super.onPause(); 

     System.out.println("ON PAUSE!"); 

     if(lastTask != null){ 
      lastTask.cancel(true); 
     } 
    } 


    //In asynctask implementation 

    @Override 
    protected Result doInBackground(Params... params) { 
     for(int i = 0;!isCancelled();i++){ 
      System.out.printf(">>>>>>>>>>>>>> Doing some work. Iteration %d%n", i); 
      SystemClock.sleep(1000); 
     } 
    } 

    @Override 
    protected void onCancelled(Result result){ 
     System.out.println("ON CANCELLED (args)!"); 
    } 

我在Android 2.2的AVD測試。


UPDATE
根據該文檔,在API級11的溶液中加入該方法我測試在API LV8虛擬設備,但在編譯爲LV16。所以這種方法在設備操作系統中不存在。我可能會期待一個例外。

回答

1

onCancelled(Result result)在API級別11,即Android 3.0中引入。

+0

我剛剛更新了我的問題與這個信息,但這是之前張貼,如此解決。順便說一句,爲什麼調用一個不存在的方法時不會引發異常? –

+1

我想你用一個足夠高的Project Build Target編譯和/或在清單文件中指定了足夠高的minSdkVersion。儘管如此,我也覺得這很奇怪。 – Ridcully

3

保護無效onCancelled()已於API級別3

凡爲,保護無效onCancelled(結果結果)已於API級11的Android即3.0引入引入。