Android - 多级活动链的问题

Mar*_*ver 6 android warnings android-intent android-asynctask android-activity

(请注意,我在网上搜索了我在下面描述的警告,并且几乎没有提到它们.)

我与API 10级.我有一个偏好屏幕(基于XML),并在那里创建一个自定义的ListActivity如下的选项之一工作:

  • PreferenceActivity包含一个创建...的选项
    • ListActivity是一个使用...的对话框
      • setOnClickListener()包含一个onClick()方法(在调用finish()之前)将startActivity()一个新的Intent ...
        • 子活动启动...
          • 执行可变时间的AsyncTask工作时调用...
          • onPostExecute()调用finish()

问题是,它的工作原理......但是我从一开始就收到了大量的警告:

10-16 21:59:25.010: WARN/WindowManager(170): Rebuild removed 4 windows but added 3
10-16 21:59:25.010: WARN/WindowManager(170): This window was lost:.....
Run Code Online (Sandbox Code Playgroud)

奇怪的是,当任务快速执行时,只会发出大量警告!当我添加了一个Thread.sleep()方法调用我的AsyncTask人为夸大其运行时它的工作和任何扔任何警告.实际上,只要运行时间大于(大约)500毫秒就可以正常工作.(请注意,我尝试使用startActivityForResult()没有更大的影响 - 出现同样的问题.)


我们的目标是用户选择首选项目,他们改变其设置,某些处理发生,然后用户在他们开始在偏好菜单左后卫.

我认为这是一个竞争条件......窗口被销毁的顺序取决于运行时...我得到的印象是当子Activity在其父ListActivity之前关闭时会发出警告.但是在1s sleep()中加入是不合理的解决方案,除非这是某种类型的Android错误(不太可能,但后来我已经再次复制了几个).

那么,我的这个缺陷导致了这一系列的警告?很高兴地说"在偏好,做到这一点,然后那样做,然后完成"但我认为我正在做的是相同的.也许不是......想法?


编辑:我决定尝试将此ListActivity作为自定义对话框...这是我最近尝试做的更痛苦的事情之一(getApplication()不起作用,许多其他事情似乎出错了..在某种程度上可能是经验不足,但对话真的不是为了这个......

Eri*_*enz 4

尝试以下两件事:

  • 在对其父活动 (PreferenceActivity) 调用 finish() 之前关闭对话框。

  • 确保您在子活动生命周期的后期启动 AsyncTask。我特别认为你应该在 onResume() 中启动它。

我最好的猜测是,在子活动有机会完全启动之前,AsyncTask 在子活动上调用 finish() 。为什么这很重要?我不知道。不过还是要尝试一下。祝你好运!