如何在AsyncTask中调用Activity方法

时间:2013-01-19 22:10:21

标签: android android-asynctask android-activity

我想在Activity的{​​{1}}之后调用onPostExecute方法。 你知道我怎么做吗?

我想调用AsyncTask中的sendSMS(String phoneNumber, String message)方法。

4 个答案:

答案 0 :(得分:4)

一种方法是传递ActivityPostTask构造函数的实例,例如:

private class PostTask extends AsyncTask<String, Integer, String>
{
    private AsyncBigCalculActivity activity;

    public PostTask(AsyncBigCalculActivity activity)
    {
        this.activity = activity;
    }

    // ...
}

并在创建PostTask实例时,传递活动实例:

new PostTask(this).execute();

现在,您可以在sendSMS()内调用PostTask,例如:

activty.sendSMS(...);

另请注意,如果您将PostTask定义为activty中的私有类,则可以调用sendSMS(),如:

AsyncBigCalculActivity.this.sendSMS(...);

答案 1 :(得分:1)

将构造函数和全局变量添加到AsyncTask中,如下所示:

AsyncBigCalculActivity mActivity;

public PostTask(AsyncBigCalculActivity a) {
    mActivity = a;
}

然后在需要时使用mActivity.sendSMS("test", "test")

但是,实际应该在实用程序类中使用sendSMS()等方法。

答案 2 :(得分:1)

如果您的AsyncTaskActivity的内部类,那么您应该可以从Activity调用onPostExecute()方法。否则,您可以将Context发送到AsyncTask的构造函数并使用它来调用方法

答案 3 :(得分:0)

写回叫

您可以使用界面创建回叫。这样,您可以将AsyncTask用于任何活动。 (松散耦合的代码)

1)创建回调

interface MyAsyncTaskCallBack{

   public void doStuff(String arg1,String arg2);

}  

2)在AsyncTask中初始化回调

private class MyTask extends AsyncTask<String, Void, Void>
{
     private MyAsyncTaskCallBackactivity callback;

     public MyTask(MyAsyncTaskCallBackactivity callback)
     {
          this.callback = callback;
     }

     //Call callback.doStuff(....phonenum, ....message); in your postExecute

}

3)在您的Activity中实现回调并覆盖doStuff()方法

public YourActivity extends AppCompatActivity implements MyAsyncTaskCallBack{

      // Your Activity code 
      // new MyTask(this).execute("phonenum","msg");    //<--- This is how you run AsyncTask

      private void sendMessage(String num, String msg){

          // send msg logic
      }

     @Override
     public void doStuff(String arg1,String arg2){
         sendMessage(arg1,arg2);  // invoke activity method
     }

}