Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.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活动中的多个onStop/onResume调用 背景_Android_Android Activity_Android Orientation - Fatal编程技术网

Android活动中的多个onStop/onResume调用 背景

Android活动中的多个onStop/onResume调用 背景,android,android-activity,android-orientation,Android,Android Activity,Android Orientation,将我的应用程序置于后台(在Android手机上的其他位置导航)时,onStop()会被调用一次,正如预期的那样() 问题理由:onStop()包含开发人员希望运行一次的代码 问题: 为什么,如果我在应用程序活动中锁定手机(单次按下电源按钮),onStop()会被呼叫3次? 05-28 14:06:29.322 24347-24347/com... D/DEBUG: onCreate 05-28 14:06:29.380 24347-24347/com... D/DEBUG: onStart 05

将我的应用程序置于后台(在Android手机上的其他位置导航)时,
onStop()
会被调用一次,正如预期的那样()

问题理由:onStop()包含开发人员希望运行一次的代码

问题: 为什么,如果我在应用程序活动中锁定手机(单次按下电源按钮),
onStop()
会被呼叫3次?

05-28 14:06:29.322 24347-24347/com... D/DEBUG: onCreate
05-28 14:06:29.380 24347-24347/com... D/DEBUG: onStart
05-28 14:06:29.380 24347-24347/com... D/DEBUG: onResume  
05-28 14:09:01.411 24347-24347/com... D/DEBUG: onCreate
05-28 14:09:01.453 24347-24347/com... D/DEBUG: onStart
05-28 14:09:01.453 24347-24347/com... D/DEBUG: onResume  
更新 案例1

05-28 14:06:29.322 24347-24347/com... D/DEBUG: onCreate
05-28 14:06:29.380 24347-24347/com... D/DEBUG: onStart
05-28 14:06:29.380 24347-24347/com... D/DEBUG: onResume  
05-28 14:09:01.411 24347-24347/com... D/DEBUG: onCreate
05-28 14:09:01.453 24347-24347/com... D/DEBUG: onStart
05-28 14:09:01.453 24347-24347/com... D/DEBUG: onResume  
活动正在运行时,我在应用程序之外的其他位置导航:

05-28 14:06:31.954 24347-24347/com... D/DEBUG: onStop  
此时,我导航回应用程序并打开它:

05-28 14:06:34.314 24347-24347/com... D/DEBUG: onStart
05-28 14:06:34.314 24347-24347/com... D/DEBUG: onResume  
案例2

05-28 14:06:29.322 24347-24347/com... D/DEBUG: onCreate
05-28 14:06:29.380 24347-24347/com... D/DEBUG: onStart
05-28 14:06:29.380 24347-24347/com... D/DEBUG: onResume  
05-28 14:09:01.411 24347-24347/com... D/DEBUG: onCreate
05-28 14:09:01.453 24347-24347/com... D/DEBUG: onStart
05-28 14:09:01.453 24347-24347/com... D/DEBUG: onResume  
此时,我锁定设备:

05-28 14:35:55.017 30961-30961/com... D/DEBUG: onStop
05-28 14:35:55.278 30961-30961/com... D/DEBUG: onDestroy
05-28 14:35:55.367 30961-30961/com... D/DEBUG: onCreate
05-28 14:35:55.411 30961-30961/com... D/DEBUG: onStart
05-28 14:35:55.419 30961-30961/com... D/DEBUG: onResume
05-28 14:35:55.440 30961-30961/com... D/DEBUG: onStop
05-28 14:35:55.441 30961-30961/com... D/DEBUG: onDestroy
05-28 14:35:55.451 30961-30961/com... D/DEBUG: onCreate
05-28 14:35:55.493 30961-30961/com... D/DEBUG: onStart
05-28 14:35:55.502 30961-30961/com... D/DEBUG: onResume
05-28 14:35:55.830 30961-30961/com... D/DEBUG: onStop
05-28 14:35:55.969 30961-30961/com... D/DEBUG: onDestroy
05-28 14:35:56.004 30961-30961/com... D/DEBUG: onCreate
05-28 14:35:56.044 30961-30961/com... D/DEBUG: onStart
05-28 14:35:56.052 30961-30961/com... D/DEBUG: onResume
我将其解锁以查看仍然存在的活动:

05-28 14:39:38.225 30961-30961/com... D/DEBUG: onResume
05-28 14:39:38.415 30961-30961/com... D/DEBUG: onStop
05-28 14:39:38.416 30961-30961/com... D/DEBUG: onDestroy
05-28 14:39:38.465 30961-30961/com... D/DEBUG: onCreate
05-28 14:39:38.610 30961-30961/com... D/DEBUG: onStart
05-28 14:39:38.624 30961-30961/com... D/DEBUG: onResume
不确定是否相关,但活动使用VLC库播放视频。无论视频当前是否正在播放,都会得到相同的结果

更新
我在
AndroidManifest.xml
中的活动是用
android:screenOrientation=“sensorscape”
定义的。删除属性后,问题就会消失(
android:screenOrientation=“unspecified”
)。

指出了正确的问题

活动被破坏和重新创建的原因类似于方向的改变
我的活动正在使用android:screenOrientation=“Sensor横向”,我不知道销毁活动时“方向”可能会改变

我的应用程序同时依赖于onStop()和onResume()调用,因此我将实现onResume(),因为它们类似

基于
您可能会发现->如果您想确保代码只执行一次,请使用onDestroycan u share您的代码?您需要弄清楚为什么您的
活动会被销毁并重新创建。在我看来,安卓正在经历一次配置变化。您可以自己尝试这样做,并查看日志。不要锁定手机,只需将方向从纵向更改为横向,然后再更改。我觉得这可能就是你看到的。试试看,告诉我你发现了什么。你链接的关于被多次调用的
ondestory()
的问题只有错误的答案。这个问题是关于
Fragment.onDestroy()
的,两个答案都是关于
Activity.onDestroy()
,而“正确”的答案是错误的:-(叹气…@DavidWasser我相信你对方向的改变是正确的。这至少与此有关(我更新了问题的细节).虽然我没有弄清楚该机制到底是如何工作的,但在不阻止多次呼叫的情况下,我解决了它,并保持了我在下面的回答中所呼叫的状态。谢谢!