2016-05-31 81 views

回答

1

後臺任務將繼續處理。

從文檔:

如果設置,以及正在啓動的活動在目前的任務已經運行,然後,而不是在它的上面推出該活動的一個新實例,其他所有活動將被關閉,並且這個意圖將作爲新的意圖被傳遞到(現在在上面的)舊活動。

如何工作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); 
       } 
      } 
     }; 
    } 

我們只需要兩件事情,需要被記住。

  • WorkerRunnable實際上是可贖回
  • 結果結果= doInBackground(mParams); //在後臺線程中處理

所以這裏是您的答案。 doInBackground將被處理,但onPostExecute可能會產生NPE,因爲父母的活動已被破壞。