最近在工作中遇到一个很坑的情况
App在部分手机上会出现比如:点开应用→SplashActivity→MainActivity,然后将应用退到后台之后,再次点击应用图标打开,又执行上述操作:点开应用→SplashActivity→某Mainctivity。之后按返回键退出应用。并没有退回到桌面,而是退回到了第一次的MainActivity。此情况在oppo手机中出现,还好同事指点,叫我再SplashActivity中加入如下代码。
if (!isTaskRoot()){
finish();
return;
}
问题就迎刃而解了。
那么,为什么要加入这句代码呢?这个方法又是属于哪里?
让我们点击方法进入源码,从此不做单身狗。。咳咳,扯远了。
该方法属于Activity这个类中
/**
* Return whether this activity is the root of a task. The root is the
* first activity in a task.
*
* @return True if this is the root activity, else false.
*/
public boolean isTaskRoot() {
try {
return ActivityManagerNative.getDefault()
.getTaskForActivity(mToken, true) >= 0;
} catch (RemoteException e) {
return false;
}
}
好吧,我好像不想再往下点了,感觉自己需要学的还是很多,不过!我们可以看注释嘛。关键就在注释。
/**
* Return whether this activity is the root of a task. The root is the
* first activity in a task.
*
* @return True if this is the root activity, else false.
这个大致意思应该是说,判断当前的activity 是否是任务栈task中的根activity,即第一个在栈中创建的activity。
Ok,很显然,加上如下代码就是为了判断是否是第一个activity。如果存在其他的activity,比如之前举例说的MainActivity的情况,就将自身finish了。也就直接展示了之前打开的MainActivity。不会再出现多个重复打开的情况。
if (!isTaskRoot()){
finish();
return;
}
by the way:上述方法要写在onCreate()方法中,在Activity创建完成之前就判断并做出一些操作。
如果有说的不对的或者有更好的操作的,欢迎提出宝贵的意见。