1

我有带有静态方法的实用程序类。假设这些方法可以触发后台任务,如下所示:

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();
    }
}

它有什么害处吗?(假设后台线程不保留对调用实用程序方法的活动的任何引用)

4

1 回答 1

0

是的,您应该从 UI 中取消 AsyncTask。否则,您可以泄漏 AsyncTask(从经验中谈)。而且,谁知道呢,甚至可能会阻止另一个线程在同一个线程上启动:他们不断更改实现:http: //developer.android.com/reference/android/os/AsyncTask.html。或者,相反,多个 onCreate() 可能会创建重复的“僵尸”AsyncTask。无论如何,这不是 AsyncTask 的预期用途:它们应该是短暂的并且被适当地控制。因此,该静态业务似乎没有真正的收益。

我认为您应该在 Activity 的生命周期内启动一个服务并从中产生一个踏板,或者传统上使用 AsyncTask。

这里有一个很好的异步处理教程:http ://www.vogella.com/articles/AndroidPerformance/article.html 。

于 2012-09-20T10:18:54.827 回答