Activity A启动 B:
A.onPaunse - B.onCreate - B.onStart - B.onResume - A.onstop
-02-26 16:26:34.578 2754-2754/? I/MICO.base: [main] Activity onPause Launcher-02-26 16:26:34.599 2754-2754/? D/MICO.base: [main] Activity onCreate SettingsActivity, , taskId: 17-02-26 16:26:34.643 2754-2754/? D/MICO.base: [main] SettingsActivity onCreate-02-26 16:26:34.650 2754-2754/? I/MICO.base: [main] Activity onStart SettingsActivity-02-26 16:26:34.651 2754-2754/? I/MICO.base: [main] Activity onResume SettingsActivity-02-26 16:26:35.032 2754-2754/? D/MICO.base: [main] Fragment onStop RefrigeratorMainFragment540-02-26 16:26:35.032 2754-2754/? I/MICO.base: [main] Activity onStop Launcher
从B返回A:
B.onPause - A.onRestart - A.onStart - A.onResume - B.onStop - B.onDestory
-02-26 17:22:18.574 2754-2754/? I/MICO.base: [main] Activity onPause SettingsActivity-02-26 17:22:18.596 2754-2754/? I/MICO.base: [main] Activity onRestart Launcher-02-26 17:22:18.602 2754-2754/? D/MICO.base: [main] Fragment onStart RefrigeratorMainFragment540-02-26 17:22:18.603 2754-2754/? I/MICO.base: [main] Activity onStart Launcher-02-26 17:22:18.605 2754-2754/? I/MICO.base: [main] Activity onResume Launcher-02-26 17:22:18.611 2754-2754/? I/MICO.base: [main] Fragment onActivate RefrigeratorMainFragment540-02-26 17:22:18.612 2754-2754/? D/MICO.base: [main] Fragment onResume RefrigeratorMainFragment540-02-26 17:22:18.718 2754-2754/? I/MICO.base: [main] Activity onStop SettingsActivity-02-26 17:22:18.721 2754-2754/? D/MICO.base: [main] Activity onDestroy SettingsActivity -02-26 17:22:18.723 2754-2754/? D/MICO.base: [main] SettingsActivity onDestroy
我们可以在源码里面,可以看到注释已经写的很清楚了,B 创建成功之后,才会调用A的onStop
特殊情况:
如果B 是个透明的,或者是对话框的样式, 就不会调用A 的onStop()方法。因为对用户来说,A 还是可见的。
假如启动模式为SingleTask,OnNewIntent 调用时机
I/MICO.base: [main] Activity onPause SettingsActivityI/MICO.base: [main] Activity onRestart LauncherD/MICO.base: [main] Fragment onStart RefrigeratorMainFragment540I/MICO.base: [main] Activity onStart LauncherD/MICO.base: [main] Activity onNewIntent Launcher, com.Launcher@61faf19I/MICO.base: [main] Activity onResume LauncherI/MICO.base: [main] Fragment onActivate RefrigeratorMainFragment540D/MICO.base: [main] Fragment onResume RefrigeratorMainFragment540I/MICO.base: [main] Activity onStop SettingsActivity
在onResume 之前被调用
可以看系统源码:
android.app.ActivityThread#performResumeActivitypublic ActivityClientRecord performResumeActivity(IBinder token, boolean finalStateRequest,String reason) {try {if (r.pendingIntents != null) {deliverNewIntents(r, r.pendingIntents);r.pendingIntents = null;}if (r.pendingResults != null) {deliverResults(r, r.pendingResults, reason);r.pendingResults = null;}r.activity.performResume(r.startsNotResumed, reason);}
为什么要这样设计? 从源码怎么看?
当一个页面,还没有创建出来,不应该在后台,只是暂停,所以A onPasue 就去创建B. B创建成功后,就调用A.onStop。
参考:
/p/5dcfea447d0f