Android 这是正常的吗;activity.onCreate();要多次调用的方法
我在onCreate方法中有一些代码作为一个活动,并注意到它被调用了三次。这是正常的行为吗?谢谢。您可能需要阅读上的文档 对于活动的每个生命周期,OnCreate只调用一次。但是,有许多情况会导致您的活动停止并恢复正常。因此,将再次调用onCreateAndroid 这是正常的吗;activity.onCreate();要多次调用的方法,android,oncreate,Android,Oncreate,我在onCreate方法中有一些代码作为一个活动,并注意到它被调用了三次。这是正常的行为吗?谢谢。您可能需要阅读上的文档 对于活动的每个生命周期,OnCreate只调用一次。但是,有许多情况会导致您的活动停止并恢复正常。因此,将再次调用onCreate 为了正确地支持这一点,您可以将状态信息保存在onSaveInstanceState中,并从创建时获取的状态包中还原它。您还可以在活动配置中的AndroidManifest上设置以下语句,自行处理配置更改: android:configChange
为了正确地支持这一点,您可以将状态信息保存在onSaveInstanceState中,并从创建时获取的状态包中还原它。您还可以在活动配置中的AndroidManifest上设置以下语句,自行处理配置更改:
android:configChanges="orientation|keyboardHidden"
有关更多信息,您可以查看下面是我遇到(并解决)的一个场景,它产生了您正在描述的行为: 有3个事件将触发OnTouch-1。android.view.MotionEvent.ACTION\u UP 2。android.view.MotionEvent.ACTION\u向下3。android.view.MotionEvent.ACTION\u移动 通常,这三个事件同时触发OnTouch侦听器。当此侦听器用于启动活动(通过传递给startActivity()的意图)时,您可以复制此行为,该行为将多次调用活动上的OnCreate(本例中为3)
如果启动活动时使用的不是此侦听器类型,则可能需要查看文档中触发活动的任何侦听器,以查看是否遇到类似的情况。很可能不止一个事件触发侦听器。除了预期的情况之外,我观察到只有那些活动(onCreate)被调用两次,它们正在创建新线程或可运行。(我认为这是安卓系统的一个缺陷) 解决方案很简单(尽管您可能不喜欢它:p)
我有一个类似的问题,它是由手机引起的。
在我在
super.onCreate(…)
之前初始化它们之后,问题就消失了。在某些情况下,可能是因为多次记录。在调试模式下运行应用程序,并检查代码是否运行了两次或只是记录了多次
如果只是日志记录,请检查我在这个问题上的答案:
如果在开发人员设置中打开了“不要离开活动”,也会发生这种情况。在我的例子中,子类的
onCreate
方法运行了两次。调用超类的onCreate
方法后更改主题会导致此问题。我在超类的onCreate
方法之前设置了主题,然后子类的onCreate
方法就不再被调用了
公共类XActivity扩展了YActivity{//XActivity是子类
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.xl);
}
...
公共类YaActivity扩展了AppCompatActivity{//YaActivity是超类。
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setTheme();
}
...
转换为:
公共类YActivity扩展了appcompativity{//YActivity是超类。
@凌驾
创建时受保护的void(@Nullable Bundle savedInstanceState){
setTheme();
super.onCreate(savedInstanceState);
}
...
onCreate将在您的活动被破坏和重新创建时被调用,这种情况会在设备旋转、键盘打开或您切换应用程序时发生,并且系统决定是时候回收一些内存并关闭您的应用程序了。这可能会触发此行为?类似的问题-onCreate()被调用两次。对我来说,这是由于在onCreate期间启动AsyncTask造成的。解决方案:在onCreate期间创建AsyncTask,但将其execute()放在postDelayed()中调用Runnable:此答案不符合此帖子的性质:。它声称由于服务启动,应用程序可以初始化两次。为什么?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash_screen);
if(savedInstanceState == null){
// everything else that doesn't update UI
}
}