2012-01-09 106 views
0

一些具體情況:asynctask onActivityResult後執行onResume

我有兩個ActivitiesFirstActivity從網絡(〜100 kb)加載數據並能夠啓動SecondActivitystartActivityForResult()。在得到結果後,應該觸發另一個網絡呼叫。除了表演之外,所有這些工作都很好。這是問題。

我觸發來自onActivityResult(),或onResume()onPostResume()AsyncTask。我預計SecondActivity完成,FirstActivity得到顯示和ProgressBar顯示,表明我的下載工程。而是我看到以下內容:

SecondActivity凍結時,FirstActivity被推出(我看到它在日誌),AsyncTask觸發,當AsyncTask完成了它的工作FirstActivity只獲取顯示!

這也很奇怪,因爲我在第一次啓動FirstActivity時使用完全相同的代碼,並且所有工作都按預期工作。

所以,問題:

是什麼啓動從onCreate()onActivityResult()AsyncTask之間的區別?爲什麼android的行爲如此?它是否具體版本?

非常感謝。

某些代碼:

活動A(第一):

void onCreate() { 
    super.onCreate(); 
    setupUI(); 
    code = 1; 
    launchLoading(code); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    launchLoading(resultCode); 
} 

活動B(第二):

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
      setResult(i); 
      finish(); 
     } 
}); 

UPD

創建的列表自定義視圖(〜50)onPostExecute()方法。爲什麼它會造成麻煩?

+0

提供您的AsyncTask類的代碼 - 您的問題很可能是由'onPostExecute(..)'方法的錯誤實現導致的 – 2012-01-09 09:40:18

+0

感謝您的意見。我在onPostExecute()方法中找到一行導致問題。我打算調查一下。我會用細節更新這個問題。 – 2012-01-09 09:53:23

+0

更新了帖子。 – 2012-01-09 10:30:37

回答

0

感謝所有。問題在其他地方發現。在FirstActivity我有一個自定義視圖的列表。每個人都擁有一個小的位圖,但這些視圖的數量接近50。因此,當您返回到FirstActivity時,將爲每個視圖調用onMeasure()。儘可能快地做到這一點是重要的。當我改進這種方法時,問題已經消失。

0

當你從另一個活動返回它只是恢復活動它不會去onCreate方法()。您需要做的是使用startActivityForResult()從asyntask活動開始另一個活動,並在您的asyntask活動中覆蓋onActivityResult方法。並在onActivityResult()中再次執行asyntask。好,你這樣做是地方從asyntask調用的onResume因爲在其他一些情況下,也將在的onResume走類似按下home鍵,然後再次去

0

兩者onPostExecute(..)onPreExecute(..)方法在UI線程執行(這可能會導致的凍結),而doInBackground(..)正在單獨的線程中執行。考慮將耗時的操作從onPostExecute(..)移到doInBackground(..)方法。

無論如何,很難在沒有看到您的AsyncTask類和launchLoading(resultCode)方法代碼的情況下爲您提供任何建議。