Android-多层次活动链的问题

Android-多层次活动链的问题,android,android-activity,android-intent,warnings,android-asynctask,Android,Android Activity,Android Intent,Warnings,Android Asynctask,(请注意,我在网上搜索了下面描述的警告,但几乎没有找到任何关于它们的信息。) 我正在使用API级别10。我有一个首选项屏幕(基于XML),其中的一个选项创建一个自定义ListActivity,如下所示: 首选项活动包含一个选项,用于创建。。。 ListActivity这是一个使用。。。 setOnClickListener()包含一个onClick()方法,该方法(在调用finish()之前)将启动Tactivity()一个新的意图。。。 子活动启动一个。。。 AsyncTask它执行

(请注意,我在网上搜索了下面描述的警告,但几乎没有找到任何关于它们的信息。)

我正在使用API级别10。我有一个首选项屏幕(基于XML),其中的一个选项创建一个自定义ListActivity,如下所示:

  • 首选项活动包含一个选项,用于创建。。。
    • ListActivity这是一个使用。。。
      • setOnClickListener()包含一个onClick()方法,该方法(在调用finish()之前)将启动Tactivity()一个新的意图。。。
        • 子活动启动一个。。。
          • AsyncTask它执行可变时间工作,完成后调用
          • 调用finish()的onPostExecute()
问题是,它是有效的。。。但我收到了一系列警告,首先是:

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:.....
奇怪的是,这一大堆警告只有在任务快速执行时才会出现!当我向AsyncTask添加一个Thread.sleep()调用来人为地膨胀它的运行时时,它工作了,并且没有发出任何警告。事实上,只要运行时间超过(大约)500毫秒,它就可以正常工作。(请注意,我尝试使用startActivityForResult()并没有产生更大的效果-同样的问题也会出现。)


目标是用户选择一个首选项,他们更改其设置,进行一些处理,然后用户返回他们开始使用的首选项菜单

我打赌这是一个比赛条件。。。销毁窗口的顺序因运行时而异。。。我得到的印象是,当子活动在其父ListActivity之前关闭时,会抛出警告。但是,在中添加1s sleep()不是一个合理的解决方案,除非这是某种Android bug(不太可能,但我今天已经复制了其中的一些)

那么,这个my中有什么缺陷导致了这一系列警告?最好说“根据偏好,做这个,然后做那个,然后完成”,但我认为我所做的是等效的。也许不是。。。想法



编辑:我决定尝试以自定义对话框的形式执行此ListActivity。。。这是我最近尝试做的最痛苦的事情之一(getApplication()不起作用,其他很多事情似乎都出了问题……在某种程度上,这可能是缺乏经验,但对话框实际上也不适用于此…

尝试以下两件事:

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

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


我最好的猜测是,在子活动完全启动之前,AsyncTask正在对子活动调用finish()。这有什么关系?我不确定。尽管可以尝试一下。祝你好运!

在子活动中,你在哪里启动AsyncTask?可能与finish()的时间有关调用。如果将finish()放在当前启动AsyncTask的位置,会发生什么情况?相同的警告?我尝试了几种方法,最明显的是使用“forResult”版本来等待完成,以及移动finish()around.没有帮助。让子活动成为一个对话框可能更好,但这仍然需要更多的工作(可能有必要,因为现在在这个活动中启用了后退按钮,实际上不应该避免更大的比赛条件问题)。我想知道是不是父窗口出了问题…现在它是一个很长的链,如图所示…也许我的新活动/对话框应该有首选项的上下文,而不是ListActivity。我会记住这一点,以备将来参考…谢谢你的回答!