Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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 最小化应用程序,更改语言并继续调用onCreate()而不是onResume()_Android_Android Activity_Activity Lifecycle - Fatal编程技术网

Android 最小化应用程序,更改语言并继续调用onCreate()而不是onResume()

Android 最小化应用程序,更改语言并继续调用onCreate()而不是onResume(),android,android-activity,activity-lifecycle,Android,Android Activity,Activity Lifecycle,我刚刚注意到我的应用程序中出现了一个奇怪的问题。当我运行我的应用程序时,如果我将其最小化,则转到设置并更改语言,然后恢复我的应用程序(注意:这是最小化/恢复,而不是退出/启动),它将调用活动的onCreate(),而不是调用onResume() 这导致了很多问题,尤其是在视图中使用片段的区域。显示的片段是旧片段,但它们所持有的活动引用是null。因此,恢复后,getActivity()不会立即工作,导致许多地方出现NullPointerException 我的应用程序是为Android 4.0.

我刚刚注意到我的应用程序中出现了一个奇怪的问题。当我运行我的应用程序时,如果我将其最小化,则转到设置并更改语言,然后恢复我的应用程序(注意:这是最小化/恢复,而不是退出/启动),它将调用活动的
onCreate()
,而不是调用
onResume()

这导致了很多问题,尤其是在视图中使用片段的区域。显示的片段是旧片段,但它们所持有的活动引用是
null
。因此,恢复后,
getActivity()
不会立即工作,导致许多地方出现
NullPointerException

我的应用程序是为Android 4.0.4及以上版本构建的,我在不同的设备和模拟器上注意到了这个问题,所以这不是平台问题

理想情况下,我希望按预期调用
onResume()
。如果没有,我更愿意让应用程序自动重新启动,并将用户放在主屏幕上,而不必面对应用程序崩溃

该应用程序本身只支持一种语言:英语(美国)

以前有人遇到过这个问题吗?如果是,你能设法解决它吗

编辑:根据类Stacker的回答,似乎我需要自己处理配置更改。除了在
onCreate()
本身中引发异常之外,这应该没问题。我正在调用
onCreate()
中的
getWindow().setRequestFeature(Window.FEATURE\u undeterminate\u PROGRESS)
。当locate更改时,此行抛出一个
RuntimeException
,表示必须在
setContentView()之前调用它


这是否意味着我的活动没有被正确地销毁?

这不是问题,而是设计的问题

如果语言改变,那就是配置的改变,就像屏幕旋转一样

这意味着很多东西需要重新创造。因此,这是通过onCreate()处理的

很抱歉听到这个坏消息,但您必须更正创建对象的位置以及onCreate amnd onResume的互操作方式


编辑:关于
运行时异常
,为了安全起见,请在
super.onCreate(savedInstanceState)
之前调用
getWindow().setRequestFeature(Window.FEATURE\u undeterminate\u PROGRESS)
,正如您在聊天时发现的那样。

这不是问题,这是设计的

如果语言改变,那就是配置的改变,就像屏幕旋转一样

这意味着很多东西需要重新创造。因此,这是通过onCreate()处理的

很抱歉听到这个坏消息,但您必须更正创建对象的位置以及onCreate amnd onResume的互操作方式


编辑:关于
运行时异常
,为了安全起见,请在
super.onCreate(savedInstanceState)
之前调用
getWindow().setRequestFeature(Window.FEATURE\u undeterminate\u PROGRESS)
,正如您在聊天时发现的那样。

将这些行放在清单文件中,看看它是否有效

    <activity
        android:name="youractivity"
        android:configChanges="locale|layoutDirection"
        android:label="youractivitylabel" />

将这些行放在清单文件中,看看它是否有效

    <activity
        android:name="youractivity"
        android:configChanges="locale|layoutDirection"
        android:label="youractivitylabel" />

在更改区域设置后,片段中出现空指针异常的问题与此相同。为了将来的参考,我分享了一个我认为对我的案例有帮助的解决方案。在片段的
onCreateView()
中,只需添加以下行:

this.setRetainInstance(true);
这将阻止调用
onDestroy()
onCreate()
。相反,将调用
onDetach()
onAttach(活动)
。它帮助了我,希望它可以帮助其他人来到这一页。
请参阅。

更改区域设置后,我在片段中遇到了相同的空指针异常问题。为了将来的参考,我分享了一个我认为对我的案例有帮助的解决方案。在片段的
onCreateView()
中,只需添加以下行:

this.setRetainInstance(true);
这将阻止调用
onDestroy()
onCreate()
。相反,将调用
onDetach()
onAttach(活动)
。它帮助了我,希望它可以帮助其他人来到这一页。
请参阅。

Hmm。。我懂了。问题是,这不是问题。我的活动会恢复得很好。问题是,生活在同一活动中的片段似乎没有被销毁,这导致了问题。我将尝试重新创建它们,看看会发生什么。@Vinayshenoy可能需要在“非配置”对象中存储一些数据,但这取决于实际显示的内容的性质、是否正在运行异步任务等。据我所知,更改语言会导致Phonegap应用程序在Android上崩溃。。。所以你的情况很好。@stu.salsbury这个问题实际上是通过我答案的编辑部分中提到的方法解决的,所以据我所知,再也不会崩溃了。@Class Stacker--谢谢,是的。。。问题是我处于HTML5 Phonegap构建环境中,因此您的解决方案比我能够访问的更低级。不过,我会将我的电话差距问题指向您的解决方案。我认为他们应该实施它。嗯。。我懂了。问题是,这不是问题。我的活动会恢复得很好。问题是,生活在同一活动中的片段似乎没有被销毁,这导致了问题。我将尝试重新创建它们,看看会发生什么。@Vinayshenoy可能需要在“非配置”对象中存储一些数据,但这取决于实际显示的内容的性质、是否正在运行异步任务等。据我所知,更改语言会导致Phonegap应用程序在Android上崩溃。。。所以你的情况很好。@stu.salsbury这个问题实际上是通过我答案的编辑部分中提到的方法解决的,所以据我所知,再也不会崩溃了。@Class Stacker--谢谢,是的。。。问题是我在HTML5 Phonegap构建环境中