2
使用AsyncTask從活動執行一些重要的後臺工作時,通過標誌FLAG_ACTIVITY_CLEAR_TOP啓動活動時。後臺任務會發生什麼?使用FLAG_ACTIVITY_CLEAR_TOP啓動活動
使用AsyncTask從活動執行一些重要的後臺工作時,通過標誌FLAG_ACTIVITY_CLEAR_TOP啓動活動時。後臺任務會發生什麼?使用FLAG_ACTIVITY_CLEAR_TOP啓動活動
後臺任務將繼續處理。
從文檔:
如果設置,以及正在啓動的活動在目前的任務已經運行,然後,而不是在它的上面推出該活動的一個新實例,其他所有活動將被關閉,並且這個意圖將作爲新的意圖被傳遞到(現在在上面的)舊活動。
如何工作AsyncTask? 讓我們來看看的AsyncTask來源:
/**
* Creates a new asynchronous task. This constructor must be invoked on the UI thread.
*/
public AsyncTask() {
mWorker = new WorkerRunnable<Params, Result>() {
public Result call() throws Exception {
mTaskInvoked.set(true);
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
//noinspection unchecked
Result result = doInBackground(mParams);
Binder.flushPendingCommands();
return postResult(result);
}
};
mFuture = new FutureTask<Result>(mWorker) {
@Override
protected void done() {
try {
postResultIfNotInvoked(get());
} catch (InterruptedException e) {
android.util.Log.w(LOG_TAG, e);
} catch (ExecutionException e) {
throw new RuntimeException("An error occurred while executing doInBackground()",
e.getCause());
} catch (CancellationException e) {
postResultIfNotInvoked(null);
}
}
};
}
我們只需要兩件事情,需要被記住。
所以這裏是您的答案。 doInBackground
將被處理,但onPostExecute
可能會產生NPE,因爲父母的活動已被破壞。