簡體   English   中英

Android:具有后台線程的Util類靜態方法(異步任務)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM