问题描述:
当App在第一次安装后,打开app,然后再点击home键,当再次点击桌面的icon时,发现app重启,重新回到了首页,并且每点击一次icon,就会在activity的Task中多出一个首页,在连续按返回键将所有首页清除掉后,此问题消失。或者在杀掉该app后再次进入,此问题消失。
问题分析:
经过一天的查找分析,在第一个安装后,activity管理栈似乎对进入的activity不做任何判断与标记(是否是栈顶的activity),每次都会入栈,在将栈清空后又回复正常(就是Task对activity做记录了,哪个处于栈顶,是否在栈里等)。
问题非常奇怪,在第一个安装后,点击icon,都会生产一个新的首页,不会用已存在在栈中的首页替换,直接就入栈了
如果有高人对此通透,还望指点一二!
问题解决:
通过不断尝试与搜索,该问题解决:
代码如下:
if(!this.isTastRoot()){
Intent mainIntent = getIntent();
String action = main.getAction();
if(mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER)&&action.equals(Intent.ACTION_MAIN)){
finish();
return;
}
}
解释一下:
isTastRoot:判断该Activity是否是所在Task的顶部的activity,即是Task的Root,如果是返回true,否则返回false;
然后获得Intent,
mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER)&&action.equals(Intent.ACTION_MAIN)
判断该activity是否在默认的任务栈中。
在mianfest中我们会设置启动的activity,其中categroy为category_launcher,action为action_main,在这里,以后默认的activity都会在启动activity所在的任务栈里(默认的,当然也可以使用自己命名的任务栈,一般不会)。
如果不是从Task中取出的(已存在Task中的),而是系统新生成的(没有回复Task中的),那么就finish掉,然后return;结束这种不正常。避免出现异常。
在启动activity的super.onCreate后添加以上代码,即可解决Android点击home键重启的问题!
在此已做记录!