Android生命周期在生命周期中哪一个事件只触发一次?
我读过一些博客,访问过一些网站。我想知道哪个事件在生命周期中只触发一次。阅读博客后,我意识到Android生命周期在生命周期中哪一个事件只触发一次?,android,android-lifecycle,Android,Android Lifecycle,我读过一些博客,访问过一些网站。我想知道哪个事件在生命周期中只触发一次。阅读博客后,我意识到onCreate()方法在生命周期中只触发一次。我不知道我是对还是错。现在我的问题是,如果我更改横向方向或纵向方向,则我只想触发任何触发一次的事件。如果用户更改方向而不是事件未触发,则此事件未触发意味着启动活动后。我想知道哪个事件在开始活动后只触发一次。这个onCreate()创建一个虚拟应用程序,覆盖onCreate,onStart,onResume,onPause,onDestroy,onRestar
onCreate()
方法在生命周期中只触发一次。我不知道我是对还是错。现在我的问题是,如果我更改横向方向或纵向方向,则我只想触发任何触发一次的事件。如果用户更改方向而不是事件未触发,则此事件未触发意味着启动活动后。我想知道哪个事件在开始活动后只触发一次。这个onCreate()创建一个虚拟应用程序,覆盖onCreate
,onStart
,onResume
,onPause
,onDestroy
,onRestart
将Log.d(“MYAPP”,“onXXX调用”)
放在那里,自己看看调用的是什么,调用的顺序是什么
这样你就可以一劳永逸地用实际的方法学习东西。
onCreate
和onDestroy
id只触发一次
onCreate:
在首次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等
onDestroy
:您在活动被销毁之前收到的最后一个呼叫。这可能是因为活动正在完成
因此,将事件代码放在onCreate中。(但这取决于您的需求,您尝试执行的操作可能会更改代码)
活动流程: 第一个
onCreate
被称为-->下一个-->onStart
-->onResume
-->您正在运行的活动将显示您的布局。(无论您在layout.xml中放了什么)
现在,如果您按下主页按钮,它将转到-->onPause
-->onStop
。(活动未在后台运行。现在再次打开活动,转到-->重新启动
-->重新启动
-->重新启动
(活动再次运行)
现在,如果按后退按钮-->onPause
-->onStop
-->-->onDestroy
编辑: 要在方向更改时停止重新启动活动,请使用 android:configChanges=“orientation | keyboardHidden”在android清单文件中
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
您可以使用onCreate()中的首选项
感谢Dhawal Sodha的回答,我在问题中提到,我知道onCreate()方法被触发过一次,但现在我的问题是,如果我改变方向,那么这个事件就会再次被触发。Dhawal Sodha你的答案并不完全正确,但这可能对其他人也有帮助!!当用户退出应用程序时,可能应该重置首选项,因为它会在应用程序的整个生命周期中持续存在。但是没有好的地方可以这样做..谢谢shree202的回答,但是如果我在SharedReferences中存储了值,而不是用户启动第二次应用程序(不仅仅是活动),那么它就不能给我最好的输出..为什么??有什么问题吗?请描述一下。检查,也检查,检查我编辑的ans--->谢谢大家。在你们大家的帮助下,我已经解决了这个问题。我添加了这个onRetainonConfigurationInstance()方法,得到了我想要的解决方案。。感谢你们所有人。还在AndroidManifest.xml文件中添加了android:configChanges=“orientation | keyboardHidden | screenSize”。。
android:configChanges="orientation|screenSize"
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {
// run your one time code
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}