2012-01-09 62 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)方法代码的情况下为您提供任何建议。

相关问题