我有静态方法的实用程序类。假设这些方法可以触发后台任务,如下所示:
class ExampleAsyncUtil {
public static void doSomeAsyncJob() {
new AsyncTask<Void, Void, Void> () {
@Override
protected Void doInBackground (Void... params) {
//do heavy job here ...
return null;
}
}.execute();
}
}
如果然后我在活动中调用util类方法然后被破坏:
class ExampleActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExampleAsyncUtil.doSomeAsyncJob();
}
@Override
protected void onDestroy() {
//should i stop async task in util on destroy ?
super.onDestroy();
}
}
它有害吗? (假设后台线程没有对调用实用程序方法的活动保持任何参考)
答案 0 :(得分:0)
是的,您应该从UI取消AsyncTask。否则你可以泄漏AsyncTask(从经验谈起)。并且,谁知道,甚至可能阻止另一个人在同一个线程上启动:他们不断改变实现:http://developer.android.com/reference/android/os/AsyncTask.html。或者,相反,多个onCreate()可以创建重复的“zombie”AsyncTask。无论如何,它不是AsyncTask的预期用途:它们应该是短暂的并且被适当控制。因此,静态业务似乎没有真正的收获。
我认为你应该启动一个服务并从中产生一个步骤,或者只是在你的Activity的生命周期内使用AsyncTask。
这里有一个关于异步处理的好教程:http://www.vogella.com/articles/AndroidPerformance/article.html。