2012-03-28 86 views

回答

8

兩種方式:

延伸的AsyncTask在父活動
  • 通處理器私有類或活動本身作爲擴展的AsyncTask
  • 如果我是你的類的PARAM

    1. 聲明類,我會遵循第一個選項。
      DOCS

      class MyActivitySubclass extends Activity { 
      
          function runOnPostExecute(){ 
           // whatever 
          } 
      
          private class MyTask extends AsyncTask<Void, Void, Void> { 
      
           void doInBackground(Void... params){ 
            // do your background stuff 
           } 
      
           void onPostExecute(Void... result){ 
            runOnPostExecute(); 
           } 
      
          } 
      
      } 
      

      注1

      放置在體內的功能onPostExecute代碼是否已在活動線程上運行,你應該只提到this關鍵字導致MyTask.this而不是MyActivitySubclass.this

    1

    onPostExecute方法在主UI線程上被觸發,所以在那裏完成的任何事情都已經在AsyncTasks調用者上。

    http://developer.android.com/reference/android/os/AsyncTask.html

    +1

    OP的問題顯然是在單獨的文件中聲明爲公共類的AsyncTask子類。他已經知道'onPostExecute'用於什麼了 – 2012-03-28 14:46:54

    2

    那麼,如果您的AsyncTask是一個內部類,你可以簡單地從onPostExecute()調用您的活動的方法:

    public class MyActivity extends Activity { 
    
        public void someMethod(String someParam) { 
         // do something with string here 
        } 
    
        public class InnerTask extends AsyncTask<...> { 
    
         protected void onPostExecute(result) { 
          someMethod(Send parameters); 
         } 
    
        } 
    
    } 
    
    0

    這是Marek Sebera的回答,他指出要使用處理程序。爲了使代碼簡單直觀,請使用界面。這不是外在的概念,我們一直使用回調函數(例如:OnClickListner等)。代碼會看起來像這樣。

    public class InnerTask extends AsyncTask<...> 
        { 
         interface ResultHandler 
         { 
          void gotResult(<> result); 
         } 
    
         private ResultHandler myResult; 
    
         //constructor 
         public InnerTask(....params...,ResultHandler callback) 
         { 
          ... 
          this.myResult = callback; 
         } 
    
         protected void onPostExecute(<>result) 
         { 
          ... 
          myResult.gotResult(result); 
         } 
    
        } 
    
        public class MyActivity extends Activity implements InnerTask.ResultHandler 
        { 
         @Override 
         protected void onCreate(Bundle savedInstanceState) 
         { 
          //do something 
          //if you want the InnerTask to execute here 
          InnerTask i = new InnerTask(....params...,this); //send 'this' as parameter 
          i.execute(); 
         } 
         @Override 
         public void gotResult(<> result) 
         { 
          //from onPostExecute 
         } 
        } 
    

    如果我們要使用在多個網站上使用相同AsynTask類,我們可以使用這種類型的實現,而不是使用嵌套類實現。

    相關問題