Android:具有后台线程的Util类静态方法(异步任务)

时间:2012-09-20 09:26:05

标签: android multithreading android-lifecycle

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

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

它有害吗? (假设后台线程没有对调用实用程序方法的活动保持任何参考)

1 个答案:

答案 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

相关问题