Java 在简单类中还是在活动中执行异步任务?
我正在尝试重构我的一项活动。我有一个非常大的私有AsyncTask类,我想把它放在一个单独的类中。AsyncTask本身也应该在完成时更新UI,因此我必须为该类提供应用程序上下文 现在,这两种方法中哪一种更好:将类作为任务创建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
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线程上执行后台操作和发布结果,而无需操作线程和/或处理程序 是的,我知道,但这不是一个一般性的问题,而是针对异步任务的这种方法的特定问题!不,没有什么不同……是的,我知道,但这不是一个一般性的问题,而是针对异步任务的这种方法的特定问题!不,没有什么不同。。。