关于点击App反复打开的一些坑

最近在工作中遇到一个很坑的情况
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创建完成之前就判断并做出一些操作。

如果有说的不对的或者有更好的操作的,欢迎提出宝贵的意见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值