我对活动生命周期有疑问。
我在跟踪所有生命周期回调方法时有两个活动。
如果我从activity1转到activity2,返回activity1,依此类推,单击按钮时startactivity(intent),我会看到oncreate始终对这两个活动执行,但没有执行ondestroy。
我从一项活动改为另一项活动:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(getActivity(), Activity2.class);
startActivity(intent);
}
});
这就是我在原木上得到的
当应用程序启动时:
09-23 23:01:03.863 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onCreate
09-23 23:01:03.951 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onStart
09-23 23:01:03.953 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onPostCreate
09-23 23:01:03.953 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onResume
09-23 23:01:03.960 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onPostResume
单击按钮转到活动2时:
09-23 23:01:46.722 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onPause
09-23 23:01:46.758 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onCreate
09-23 23:01:46.848 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onStart
09-23 23:01:46.854 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onPostCreate
09-23 23:01:46.855 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onResume
09-23 23:01:46.855 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onPostResume
09-23 23:01:47.114 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onSaveInstanceState
09-23 23:01:47.155 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onStop
单击按钮转到活动1时:
09-23 23:02:08.156 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onPause
09-23 23:02:08.372 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onCreate
09-23 23:02:08.683 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onStart
09-23 23:02:08.683 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onPostCreate
09-23 23:02:08.683 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onResume
09-23 23:02:08.684 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity1 onPostResume
09-23 23:02:09.078 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onSaveInstanceState
09-23 23:02:09.088 2485-2485/com.qqapps.androidactivitylifecycle I/Test? Activity2 onStop
您可以看到activity1 oncreate在我返回时被执行。
当我在androidmanifest.xml中将activity1定义为activity2的父级时,也会发生同样的事情
<activity
android:name=".Activity1"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity2"
android:label="@string/title_activity_activity2"
android:parentActivityName=".Activity1" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.qqapps.androidactivityparent.Activity1" />
</activity>
当我使用操作栏上的选项返回activity按钮时,activity1的oncreate是多余的。
这就是我在原木上得到的
当应用程序启动时:
09-25 15:36:17.269 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onCreate
09-25 15:36:17.469 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onStart
09-25 15:36:17.469 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onPostCreate
09-25 15:36:17.470 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onResume
09-25 15:36:17.470 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onPostResume
单击按钮转到活动2时:
09-25 15:36:49.210 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onPause
09-25 15:36:49.224 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onCreate
09-25 15:36:49.253 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onStart
09-25 15:36:49.253 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onPostCreate
09-25 15:36:49.254 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onResume
09-25 15:36:49.255 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onPostResume
09-25 15:36:49.528 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onSaveInstanceState
09-25 15:36:49.566 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onStop
从操作栏返回Activity1时:
09-25 15:37:17.741 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onPause
09-25 15:37:17.754 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onDestroy
09-25 15:37:17.765 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onCreate
09-25 15:37:17.790 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onStart
09-25 15:37:17.790 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onPostCreate
09-25 15:37:17.791 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onResume
09-25 15:37:17.792 5208-5208/com.qqapps.androidactivityparent I/Test? Activity1 onPostResume
09-25 15:37:17.957 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onStop
09-25 15:37:17.958 5208-5208/com.qqapps.androidactivityparent I/Test? Activity2 onDestroy
在本例中,当单击操作栏选项时,我看到两个活动都调用了ondestroy。我想这是外行。
正如我在这里看到的
http://developer.android.com/training/basics/activity-lifecycle/index.html
我认为oncreate只在应用程序启动或de system取消应用程序状态时调用,但我看不到ondestroy调用。
谢谢
最佳答案
如果使用按钮从activity1转到activity2,从activity2转到activity1,则将继续创建新的活动,只需在应用程序的活动堆栈中创建大量活动。然后每次切换时都会看到onCreate()
被调用,而且永远不会看到onDestroy()
被调用,因为您的任何活动都不会被破坏。它们都在任务的活动堆栈中。如果使用命令行工具adb shell dumpsys activity activities
,您甚至可以看到它们。
另外,正如我在评论中指出的,当您使用操作栏中的按钮从activity2返回到activity1时,您使用的是“向上导航”。有一些特殊的处理规则:请参见http://developer.android.com/training/implementing-navigation/ancestral.html#NavigateUp
关于android - 为什么在 Activity 之间移动时总是执行oncreate?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26488896/