2012-03-28 83 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类,我们可以使用这种类型的实现,而不是使用嵌套类实现。

    相关问题