在简单类或活动中的 AsyncTask



我正在尝试重构我的一个活动。我有一个非常大的私有AsyncTask类,我想把它放在一个单独的类中。AsyncTask 本身也应该在完成后更新 UI,因此我必须为该类提供应用程序上下文。

现在,这两种方法中哪一种更好:只需将类创建为任务?

public class MyCustomTask extends AsyncTask

与:

 new MyCustomTask().execute();

或者创建一个本身启动任务的 Actitvity,并按意图调用此 Actitivy?

public class MyCustomActivity extends Activity {
  onCreate() {
    new MyCustomTask().execute();
  }
  private class MyCustomTask extends AsyncTask<..>();
}

与:

Intent intent = new Intent(this, MyCustomActivity.class);

如果你有一个单独的 AsyncTask 并且需要在 postExecute 上执行 UI 操作,有 3 种方法可以执行它:

  1. 在您的活动中覆盖它。在子类中仅添加 UI 操作代码。

  2. 创建一个接口并将其用作侦听器。 看这里

  3. 将您的活动作为参数传递给 AsyncTask。

对于 2 和 3,您要检查 postExecute() 中的活动是否仍然处于活动状态。

以下是我在活动中执行 ASyncTask 操作的方式:

public class MyClass extends Activity {
     @Override
     public void onClick(View v) {
          MyNewThread thread = new MyNewThread();
          thread.execute();
     }
     private class MyNewThread extends ASyncTask<Void, Void, Void> {
          //Code goes here
     }
}

非常伪代码,但你明白了,它只是活动的内部私有类。现在,如果这个确切的线程是您将在多个活动中运行的东西,那么可能值得将其设为自己的类。但是,如果您只是在这里执行此操作,则此实现就可以了。无论哪种方式,都不要让它成为一个活动,它只是一个扩展 ASyncTask 的常规类。

没有

理由纯粹为了启动AsyncTask而创建单独的Activity。只需将其创建为单独的类,并在必要时传入Context。只要确保你不会泄漏它。

如果AsyncTask与活动交互,则保持相同,否则创建一个单独的活动。使用 AsyncTask 作为内部类的优点是,此类允许在 UI 线程上执行后台操作和发布结果,而无需操作线程和/或处理程序。

最新更新