2012-12-02 49 views
1
private class Test extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      Log.d("test", "called1"); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      Log.d("test", "called2"); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 
      Log.d("test", "called3"); 
     } 
    } 

和輸出時服務工作:doInBackground從來沒有所謂的背景

測試:called1

爲什麼其他方法從來沒有所謂的後臺服務時,工作?如果服務停止,那麼所有的方法調用和輸出:

測試:called1

測試:called2

測試:called3

+0

您的服務代碼? – 2012-12-02 14:17:26

+0

你在哪裏開始這個asynctask?你如何開始服務? – Selvin

+0

Asynctask從按鈕單擊開始,服務從活動創建開始。 –

回答

7

我猜你是在Android 3.0的測試.x或更新,並且您只是受到AsyncTask執行方式所做更改的影響。

這是我如何處理這個在我的代碼總是工作一樣完全並行:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    new Test().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
} else { 
    new Test().execute(); 
} 

中的AsyncTask根本上改變出現在蜂窩(見的Android SDK文檔中的「執行命令」部分here)因此,在此之前,如果您不喜歡新行爲(我認爲沒有人會這樣做),那麼您照常啓用它,對於HC和更高版本,請使用executeOnExecutor()

+0

是的,android 4.2 Nexus 7 –

+0

然後這應該是解決您的問題。只需修改您的代碼,如我的示例中所示 –

相關問題