Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 这是正常的吗;activity.onCreate();要多次调用的方法_Android_Oncreate - Fatal编程技术网

Android 这是正常的吗;activity.onCreate();要多次调用的方法

Android 这是正常的吗;activity.onCreate();要多次调用的方法,android,oncreate,Android,Oncreate,我在onCreate方法中有一些代码作为一个活动,并注意到它被调用了三次。这是正常的行为吗?谢谢。您可能需要阅读上的文档 对于活动的每个生命周期,OnCreate只调用一次。但是,有许多情况会导致您的活动停止并恢复正常。因此,将再次调用onCreate 为了正确地支持这一点,您可以将状态信息保存在onSaveInstanceState中,并从创建时获取的状态包中还原它。您还可以在活动配置中的AndroidManifest上设置以下语句,自行处理配置更改: android:configChange

我在onCreate方法中有一些代码作为一个活动,并注意到它被调用了三次。这是正常的行为吗?谢谢。

您可能需要阅读上的文档

对于活动的每个生命周期,OnCreate只调用一次。但是,有许多情况会导致您的活动停止并恢复正常。因此,将再次调用onCreate


为了正确地支持这一点,您可以将状态信息保存在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
        }
    }