Android Async任务重用

BEN*_*der 6 java android asynchronous

我正在开发一个应用程序,我需要通过Http检索数据.有了数据后,我在onPostExecute()回调方法中处理它.

如果我将async任务定义为内联类,这可以正常工作,但是由于我想在许多活动中执行相同的处理,我将其定义为外部类.

所以问题是,使用外部类如何将"事件"发送回调用类作为传递数据的方法.我知道如何在C#中执行此操作,但我是Java的新手,无法看到如何实现这一点.

G. *_*ike 4

虽然监听器在技术上确实是正确的,但我认为它要么太复杂,要么不够复杂。

这是一个更简单的解决方案:

class Foo {
   class Bar extends AsyncTask<Void, Void, Result> {

      public void onPostExecute(Result res) {
         doSomething(res);
      }
   }

   public void doSomething(Result res) {
      /// process result
   }

   public void startTask() {
       new Bar().execute();
   }
}
Run Code Online (Sandbox Code Playgroud)

相当于:

class Bar extends AsyncTask<Void, Void, Result> {
     private final Foo foo;
     public Bar(Foo foo) { this.foo = foo; }

     public void onPostExecute(Result res) {
       foo.doSomething(res);
     }
}


class Foo {
   public void doSomething(Result res) {
      /// process result
   }

   public void startTask() {
       new Bar(this).execute();
   }
}
Run Code Online (Sandbox Code Playgroud)

...这就是您所问的:当您将内部类拉出时,您会丢失隐式指针。只需明确并传递它即可。

坏消息是,该解决方案会出现各种内存泄漏和生命周期问题。我强烈建议,在您的程序变得更大之前,您考虑使用 IntentService 而不是 AsyncTask,并使用 Handler 或 Activity.runOnUiThread 将结果返回到 UI 线程。