Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在简单类中还是在活动中执行异步任务?_Java_Android_Android Asynctask_Android Activity - Fatal编程技术网

Java 在简单类中还是在活动中执行异步任务?

Java 在简单类中还是在活动中执行异步任务?,java,android,android-asynctask,android-activity,Java,Android,Android Asynctask,Android Activity,我正在尝试重构我的一项活动。我有一个非常大的私有AsyncTask类,我想把它放在一个单独的类中。AsyncTask本身也应该在完成时更新UI,因此我必须为该类提供应用程序上下文 现在,这两种方法中哪一种更好:将类作为任务创建 public class MyCustomTask extends AsyncTask 用于: new MyCustomTask().execute(); Intent intent = new Intent(this, MyCustomActivity.class

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

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

public class MyCustomTask extends AsyncTask
用于:

 new MyCustomTask().execute();
Intent intent = new Intent(this, MyCustomActivity.class);
或者创建一个自己启动任务的activity,并通过意图将其称为activity

public class MyCustomActivity extends Activity {
  onCreate() {
    new MyCustomTask().execute();
  }

  private class MyCustomTask extends 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
     }

}
公共类MyClass扩展活动{
@凌驾
公共void onClick(视图v){
MyNewThread线程=新的MyNewThread();
thread.execute();
}
私有类MyNewThread扩展了ASyncTask{
//代码在这里
}
}

非常伪代码,但你明白了,它只是活动的一个内部私有类。现在,如果您将在多个活动中运行这个线程,那么将其设置为自己的类可能是值得的。但是,如果您只是在这里这样做,这个实现是很好的。无论如何,不要将其作为活动,它只是一个扩展ASyncTask的常规类。

以下是我在活动中执行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
     }

}
公共类MyClass扩展活动{
@凌驾
公共void onClick(视图v){
MyNewThread线程=新的MyNewThread();
thread.execute();
}
私有类MyNewThread扩展了ASyncTask{
//代码在这里
}
}

非常伪代码,但你明白了,它只是活动的一个内部私有类。现在,如果您将在多个活动中运行这个线程,那么将其设置为自己的类可能是值得的。但是,如果您只是在这里这样做,这个实现是很好的。但是,无论哪种方式,都不要将其作为活动,它只是扩展ASyncTask的常规类。

如果您有一个单独的ASyncTask,并且需要在postExecute上执行UI操作,则有3种执行方法:

  • 在活动中覆盖它。在子类中仅添加UI操作代码

  • 创建一个接口并将其用作侦听器。看

  • 将活动作为参数传递给AsyncTask。看


  • 对于2和3,您希望检查活动在postExecute()中是否仍处于活动状态。

    如果您有一个单独的异步任务,并且需要在postExecute上执行UI操作,则有3种执行方法:

  • 在活动中覆盖它。在子类中仅添加UI操作代码

  • 创建一个接口并将其用作侦听器。看

  • 将活动作为参数传递给AsyncTask。看


  • 对于2和3,您希望检查postExecute()中的活动是否仍然有效。

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

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

    是的,我知道,但这不是一个一般性的问题,而是针对异步任务的这种方法的特定问题!不,没有什么不同……是的,我知道,但这不是一个一般性的问题,而是针对异步任务的这种方法的特定问题!不,没有什么不同。。。