![](/img/trans.png)
[英]Thread pool executor with background and ui thread vs Async task in android?
[英]Android: Util class static method with background thread (async task)
我有帶有靜態方法的實用程序類。 假設這些方法可以觸發后台任務,如下所示:
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();
}
}
有沒有害處? (假設后台線程不保留對調用Utility方法的活動的任何引用)
是的,您應該從用戶界面中取消AsyncTask。 否則,您可以泄漏AsyncTask(從經驗中談)。 而且,誰知道,甚至可能阻止另一個人在同一線程上啟動:他們不斷更改實現: http : //developer.android.com/reference/android/os/AsyncTask.html 。 或者相反,多個onCreate()可以創建重復的“僵屍” AsyncTask。 無論如何,這不是AsyncTask的預期用途:應該認為它們是短暫的且受到適當控制。 因此,在該靜態業務中似乎沒有任何實際收益。
我認為您應該在服務生命周期內啟動Service並從中產生作用,或者傳統上僅使用AsyncTask。
這里有一個很好的異步處理教程: http : //www.vogella.com/articles/AndroidPerformance/article.html 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.