我在我正在处理的应用中遇到了我的Android活动的奇怪行为。对于冗长的帖子感到抱歉,但我面临一个非常具体的问题。
基本上,当我通过使用硬件按钮手动暂停活动以使手机进入睡眠状态或跳出应用程序时,它将按照Android 4. *设备上的预期恢复活动,但活动将在Android上重新启动5. *设备。
然而,真正奇怪的是,在一个条件下,活动在5. *中正确恢复。 仅当我暂停时,通过再次按下列表中的应用程序显示活动应用程序列表并恢复。当我使用sleep,back或home按钮暂停时,活动会在恢复时重新启动。
坦率地说,我感到很困惑。我甚至写了一个单独的小应用程序,只是为了测试方法是以相同和正确的顺序调用的。在我的Android 4. *和5. *设备上,暂停和恢复的方法序列为onPause() -> onStop() -> onRestart() -> onStart() -> onResume()
。这符合方法层次结构在Android中的工作方式,所以一切都按顺序排列。无论在两个设备上使用哪个暂停触发器(睡眠按钮,后退按钮,主页按钮或应用程序列表按钮),它也是相同的序列。
我完全不知道为什么应用程序在我的5. *设备上使用哪个暂停按钮时表现不同,当方法序列相同且在所有情况下都正确时。
我已经搜索并阅读了几个小时的文档并尝试了针对类似问题的不同解决方案,例如向我的清单添加<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23"></uses-sdk>
,并强制android:launchMode="singleTask"
我的每个活动清单。我还确保在两台设备上禁用了在离开时破坏活动的开发人员设置。一切都没有用。
更具体地说,我的5. *设备是运行Android 5.1.1的OnePlus 2,我的两个4. *手机是运行4.1.2的三星Galaxy S2和运行4.2.2的三星Galaxy Grand I9082。
这是我的清单的转储,以防万一:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
<?xml version="1.0" encoding="utf-8"?>
package="placeholder.package.namespace">
<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23"></uses-sdk>
<uses-permission android:name="android.permission.VIBRATE" />
<application
xmlns:tools="http://schemas.android.com/tools"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
tools:replace="android:icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".GameActivity"
android:screenOrientation="landscape"
android:launchMode="singleTask">
</activity>
<activity
android:name=".MainMenu"
android:screenOrientation="landscape"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>