Android 如何区分活动娱乐是由屏幕旋转或记忆不足引起的
据 有各种各样的方式可以触发娱乐活动Android 如何区分活动娱乐是由屏幕旋转或记忆不足引起的,android,Android,据 有各种各样的方式可以触发娱乐活动 屏幕旋转 低记忆条件 我意识到屏幕旋转和低记忆条件会产生完全不同的行为 其中一个明显的观察结果是,对于从长期受压的主目录中恢复活动,它也将破坏并重新创建应用程序 对于屏幕旋转,它不会产生这种行为 我可以知道,Activity或Fragment如何区分这两种情况吗? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS
- 屏幕旋转
- 低记忆条件
应用程序
对于屏幕旋转,它不会产生这种行为
我可以知道,Activity
或Fragment
如何区分这两种情况吗?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Is this caused by screen rotation? Or restoration from low memory condition?
// How can we differentiate among "screen rotation", or "restoration from low memory condition"?
} else {
}
...
}
要产生低内存条件,请执行以下步骤
savedInstanceState
不为空。但是,同时,您会发现当前运行的应用程序
实例与第一次启动的实例不同除了静态成员在从低内存状态恢复时会变得未初始化之外,我还遇到了一些奇怪的事情
startActivityForResult
从父活动启动子活动onCreate
->onActivityResult
->onResume
onCreate
->onResume
->onActivityResult
一个明显的观察结果是,对于从长期受压的主应用程序恢复活动,它也会破坏并重新创建应用程序
不,不会的
如果您的流程已终止,则当为您创建新流程时(无论您如何启动应用程序),新的应用程序将作为新流程的一部分创建。这与“从长时间按下的主页恢复活动”没有直接关系
请问,活动或片段如何区分这两种情况
理想情况下,他们不在乎。他们关心的唯一原因是它们是否依赖于静态数据成员,而静态数据成员可能会初始化,也可能不会初始化,在这种情况下,您使用这些静态数据成员的方式是有问题的
我之前的断言是不正确的,即savedInstanceState
将为非空null
,对此我深表歉意。savedInstanceState
的主要场景是配置更改。但是,我忘记了从“最近的任务”列表(“从长时间按下的主页恢复活动”)启动也将以上次保存的实例状态传递。通过其他方式启动,如从主屏幕启动器启动,将传递savedInstanceState
的null
如果您必须区分进程已终止和其他情况,请检查一些静态数据成员,查看其是否已初始化。检查此项-https://developer.android.com/reference/android/app/Activity#isChangingConfigurations()
您只需将isChangingConfigurations()
返回的值保存在bundle中,然后在onCreate中签入它即可。确实如此,我已经测试过很多次了。重现这种情况的一个关键步骤是,在从长期受压的家中恢复应用程序之前,您需要启动其他几个应用程序(以鼓励操作系统“杀死”当前处于后台的应用程序)。@CheokYanCheng:您自己承认,您的测试证明了我的观点。如果“从长时间被压在家中恢复活动,它也会破坏并重新创建应用程序”,那么它会一直这样做。正如您所记录的,它不是。“启动几个应用程序(最好是内存密集型应用程序,比方说5个)”可能会导致Android由于内存不足而终止您的进程,而终止您的进程会导致新的应用程序
。这与“从长时间按下的主页恢复活动”没有直接关系。确定。我认为我应该改进标题“如何区分活动娱乐是由屏幕旋转或低记忆条件引起的”?这能让事情更清楚吗?@CheokYanCheng:这当然能让事情更准确。而且,正如我的回答所指出的,如果savedInstanceState
不是null
,则是由于配置更改而重新创建的,否则是由于其他原因重新创建的。您的“配置更改”是否也包括内存不足的情况?您的意思是“它可以销毁并重新创建”,而不是“它将销毁并重新创建”?