我的应用程序的第一个活动是一个闪屏,其中一些动画显示,而一些加载发生在后台线程使用AsyncTask。一旦在后台加载完成,我想开始一个新的活动。正确的做法是什么?
- 直接从AsyncTask类的onPostExecute方法启动一个新活动。
- 在开始新活动之前检查当前活动是否显示:
- 如果显示当前活动,则启动新活动。
- 如果当前活动是不显示,使用一个标志(布尔),并检查标志在onResume方法,以启动新的活动在那里。
我主要关心的是:
如果我的应用程序进入后台(由于传入电话,按home键,…)和后台线程(AsyncTask)完成执行,一个新的活动是从onPostExecute方法开始的,而我的应用程序仍然在后台:会发生什么?
- 当我的应用程序再次可见时,新的activity会直接启动吗?
我遇到了类似的情况:我的应用程序进入后台,过了一段时间,应用程序开始显示另一个活动的意图。但是,应用程序的行为现在取决于它运行的操作系统:
-
在pre 4.4设备上应用程序静默打开新活动并保持在后台。当用户恢复应用程序时,他已经被提示第二个活动。
-
在4.4设备上(在4.4.2和4.4.4上测试),应用程序打开第二个活动,但在3-4秒后,应用程序弹出前台,打断用户。
希望对大家有所帮助。我仍在寻找第二种情况的解决方案,以防止应用程序弹出到前台。
根据我的经验,我正在回答你的问题
问题1
如果你使用AsyncTask,你必须在OnPostExecute()
中启动新的活动。根据我的经验,这是正确的做法。
问题2
当你按home键或接电话时。你的活动将进入后台,直到你按下后退按钮退出应用程序(此时你的应用程序退出)。当你回到你的app你的新activity会是可见的如果后台进程完成了。否则,您将看到启动屏幕
我认为这取决于android的操作系统。它为每个组件定义了一些内置的优先级模型。
看commonsware给出的答案
change process priority in android
给出了组件优先级的简要概念。