Android 4.0.3中noHistory属性的不一致性。

3
我正在使用属性noHistory=true来标记我不想在后台堆栈中保留的活动。在Android 2.3.3上它运行良好,但在4.0.3上有一种奇怪的行为。当屏幕进入睡眠状态并唤醒时,具有noHistory=true的活动消失了!这是怎么回事?当屏幕唤醒时,活动是否已经结束?我是否错误地使用了noHistory?
2个回答

2
我今天遇到了同样的问题,这里提供了解决方案:

Android: 如何在onStop后返回带有“noHistory”属性的Activity?

实际上,如果将noHistory设置为true,则当屏幕进入睡眠状态时,您的Activity将从堆栈中删除,并且在屏幕醒来时不会被恢复。

我从布局xml文件中删除了noHistory = true,并只在我的Activity调用另一个Activity时调用了finish():

Intent intent = new Intent();
intent.setClass(this, MainActivity.class);
this.startActivity(intent);
finish();

做到了!当我点击返回按钮时,之前的活动不再出现。

我不确定这个问题是否发生在Android 2.x上,但我确定现在在Android v2.x和Android v4.x上都可以完美地工作。


这就是我最终所做的。我仍然不理解4.x上的这种行为。当屏幕进入睡眠状态时,没有理由从堆栈中移除活动。 - Brice Durand
当屏幕关闭时,活动会暂停。我在Android 4.x下观察到的是,在此之后不久,系统会要求结束该活动(调用onDestroy()方法)。一旦活动结束,Android就会将其从堆栈中移除。 - Yves Delerm
我的上一个评论不完整:当屏幕关闭时,活动会暂停。在Android 4.x下我观察到的是,系统很快会要求结束这个活动(调用onDestroy()方法)。一旦活动结束了,Android就从堆栈中删除了它,这一点很正常。所以问题是:为什么活动被销毁?在我看来,Android 4.x对已暂停的活动更有“攻击性”,并且快速地杀死它们以恢复内存。 - Yves Delerm

0
可能与 onPause() 方法在屏幕休眠时被调用有关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接