在ASyncTask.execute()之后从Activity执行x()

OVE*_*ONE 4 java multithreading android android-asynctask android-activity

这是一个我不知道如何去做的.基本上我有一个ASyncTask类,它在后台照常开展业务.完成后我想做些什么.现在,在你跳到前面说"只使用onPostExecute()"之前,这是一个问题.我需要运行的方法是在activity而不是Task类.

我看到它的方式,我有两个选择.

A:

    CustomTask task = new CustomTask();
    task.execute(passedParams);
            //when(task.execute is finished)
            {
                doX();
            }
Run Code Online (Sandbox Code Playgroud)

我希望我可以这样做,因为它非常简单,让我检查任务何时完成,而不必经常轮询活动和getStatus()活动.我不认为我会幸运,但如果有人有办法,那就太好了

B:

将活动作为参数传递给ASyncTask.这很麻烦,我不喜欢使用它,但除了那个和对象参考,我不知道它是否会工作

    CustomTask task = new CustomTask();
    task.execute(passedParams,MyActivity);
Run Code Online (Sandbox Code Playgroud)

然后在Tasks onPostExecute中,我可以让它调用MyActivity.doX();


C:

第三种方法是将asynctask作为活动本身的私有类,但我真的想将它分开.可重复性和什么不 -

有什么想法吗?

总结一下,在task.execute完成后需要doX().任何想法都赞赏.


d:

好的,我知道我在这里.我一直在想新的解决方案.可以从任何位置调用的类方法或静态方法.

public class ProfileSettings extends Activity
{
      public static void doX()
      {
          //Logic...
      }
}
Run Code Online (Sandbox Code Playgroud)

来自AsyncTask

MyActivity.doX();
Run Code Online (Sandbox Code Playgroud)

kab*_*uko 6

选项B应该有效,有时是一个不错的选择,但有时候我会使用匿名类.当您从活动中调用它时:

CustomTask task = new CustomTask() {
    @Override
    protected void onPostExecute(Long result) {
        super.onPostExecute(result);
        MyActivity.this.doX();
    }
}.execute();
Run Code Online (Sandbox Code Playgroud)