程序锁中输入密码EnterPasswordActivity的bug和长按HOME键最近Activity列表
bug1:
EnterPasswordActivity的启动模式bug bug如图片描述 分析: 1、首先打开手机卫士,系统分配一个Task给手机卫士,该Task只有Home一个Activity, 2、然后按HOME物理按键,此时回到桌面,由于都没有配置Activity启动模式,所以系统也会给桌面分配一个新的Task,并放在手机卫士Task前面 3、此时,打开有保护的浏览器应用,这时,看门狗,检测到,跳出输入密码的EnterPasswordActivity, 由于是指定的intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);即如果有Task,那么就用以前的Task,如果没有就新创建一个Task,而之前有一个Task了,栈底有一个HomeActivity,而此时输入正确的密码后,却跳到了HomeActivity界面上去了 4、这是因为,新开的EnterPasswordActivity复用了以前的手机卫士的Task,而该Task有一个HomeActivity,此时又会在栈顶将EnterPasswordActivity放置在栈顶上面。密码输入成功后,EnterPasswordActivity就finish()掉了,此时就进入了HomeActivity界面了 解决: 将EnterPasswordActivity的启动模式设置为singleInstance, 每个EnterPasswordActivity都会开启一个新的Task,就可以解决前面的bug了 <activity
android:name="cn.zengfansheng.mobilesafe.EnterPasswordActivity"
android:launchMode="singleInstance" >
</activity>注意1:长按物理HOME键,是列举出来最近开启的Activity 注意2:每一个应用一般有一个Task,如果某一个Activity配置singleInstance启动模式,那就会有个多个Task |
bug2:长按HOME键,列举最近的Activity 如果刚好,打开一个要保护的应用,输入完密码后,进入后, 此时长按HOME键,此时列举的是手机卫士的名字和图标, 但点击进去,却是EnterPasswordActivity,这个用户并不好。 解决:不在最近Activity展示,在Activity中配置 android:excludeFromRecents="true" ,不在最近列表中展示。 <activity
android:name="cn.zengfansheng.mobilesafe.EnterPasswordActivity"
android:excludeFromRecents="true"
android:launchMode="singleInstance" >
</activity>注意:在Android2.x低版本的模拟器上,长按HOME键列举的最近的Activity是不能被移除的,而高版本的Android4.x后, 在最近的列表中,可以被移除。 a)配置 android:excludeFromRecents="true" b)将列举的Activity向左拖动,就可以将其移走 |