2014-02-14 27 views
0

Android Asynctask通常瞭解問題。Android Asynctask通常瞭解問題

  1. 如果我想打的AsyncTask SyncTask,我該怎麼辦呢?

    AsyncTask A = new AsyncTask(); AsyncTask B = new AsyncTask(); A.execute(); B.execute();

如果我想讓A在B開始前完成,我該怎麼做?

  1. 如果我關閉了一個活動,對該活動的AsyncTask調用是否會被銷燬?
  2. 如果我關閉了整個應用程序,該應用程序上的AsyncTask調用是否會被破壞?
+0

define'如果我關閉整個應用程序'。 – njzk2

+0

就像退出應用程序一樣。 –

+0

這並不意味着應用程序已關閉。 – njzk2

回答

1

調用b.execute()在onPostExecute(A

0

的AsyncTask的)是一個抽象類,因此必須以它擴大到你的應用程序特定的功能添加到它。您實施doInBackground()方法來完成所需的任何工作。 AsyncTask documentation詳細解釋它。我將簡要回答你的每個問題。

如果我想製作Asynctask SyncTask,我該怎麼做?

您有正確的想法創建異步任務,但正如我之前提到的,您必須將異步任務子類化以實際完成某些工作。
下面是一個例子(注意,虛空類型都具有意義,不過documentation包含了大量詳細)

public class MyTask extends AsyncTask<Void, Void, Void> 
    { 
     //This method will run on the back ground thread 
     @Override 
     protected Void doInBackground(Void... params) 
     { 

      // All the heavy work should be done here e.g. 
      // loading from network, database etc. 
      return null; 
     } 
    } 

然後在你的活動中,您將創建並運行如下這個任務:

MyTask myTask = new MyTask(); 
    myTask.execute() 

如果我想讓A在B開始前完成,我應該怎麼做?

隨着文檔狀態:

當首次引入AsyncTasks物連續在單個 後臺線程執行。從DONUT開始,將其更改爲允許多個任務並行操作的 線程池。從 HONEYCOMB開始,任務在單個線程上執行,以避免並行執行導致的常見應用程序錯誤 。

這意味着如果您使用蜂窩或更高版本的異步任務將在單個線程上運行。因此,如果按照該順序執行,通常A應該在B之前執行。但是我會這樣做:啓動A,然後當A被調用時,你知道A完成了,你可以從這個方法開始你的任務B,以確保A在B之前完成。

如果我關閉一個Activity,那個AsyncTask對該活動的調用是否會被 破壞?

這個問題的簡短答案是否定的。異步任務將繼續運行,即使活動已經調用destroy。但是,如果異步任務與活動生命週期相關聯,則需要確保在活動消失或您遇到問題時結束任務。

如果我關閉了整個應用程序,該應用程序的AsyncTask調用是否會被破壞?

我不是100%確定這個。我相信從現在開始,Android收集資源的行爲是未指定的。如果資源不足或者資源不足,它可能會立即終止任務。但是你應該避免這種設計。如果您需要在應用程序關閉後運行某些內容,請參閱Service類。