Android developer网站上给出了Android Activity生命周期的状态图:
图中的矩形表示回调方法,箭头表示回调方法调用的顺序。但是在文档中,图片下方的表格中关于onStart()
方法是这样描述的:
Called when the activity is becoming visible to the user.
Followed by
onResume()
if the activity comes to the foreground, oronStop()
if it becomes hidden.
也就是说,onStart()
调用之后,如果Activity来到前台,就接着调用onResume()
;而如果Activity变得不可见,就接着调用onStop()
。但图片中不存在从onStart()
到onStop()
的边。是否存在一种特殊的情况使得调用onStart()
之后接着调用onStop()
呢?
在StackOverflow上的一个问题中,回答者给出了一个方案:
- 你当前的Activity(叫做A1)启动了另一个非全屏的的Activity,例如对话框(叫做A2)。这时候A1的
onPause()
被调用 - 按下Home键。这时候A1的
onStop()
被调用 - 重新启动应用。这时候A1的
onStart()
被调用,但因为前台还有一个对话框,A1的onResume()
不会被调用 - 再次按下Home键。这时候A1的
onStop()
被调用
写一个应用进行验证,发现确实可行,以下是日志信息:
1 | 09-06 14:04:18.110 me.nettee.geoquiz D/QuizActivity: onCreate() called |
从这个例子可以总结出两点结论:
在某些情况下,
onStop()
的调用可以紧跟在onStart()
调用之后虽然Android文档上说,Activity在调用
onStart()
之后的Started状态是不稳定的,会很快调用onResume()
,但在某些情况下,Activity可以在Started状态停留。调用onStarted()
之后不一定会调用onResume()