Android 第三方打开App后现Launcher打开导致重启的问题

您所在的位置:网站首页 安卓切换应用会重启程序吗 Android 第三方打开App后现Launcher打开导致重启的问题

Android 第三方打开App后现Launcher打开导致重启的问题

2024-07-15 12:00| 来源: 网络整理| 查看: 265

这暂且做一个备忘录 问题

第一次遇到这个问题,测试同学说: 每次第一次安装App后,打开至第二级界面,退至后台,然后再从Launcher界面点击Icon图标启动,会发现App会重新启动,跳至首页,而不是跳至上次打开的第二级界面。但是如果把进程kill掉后,再从Launcher界面启动,跳于二级界面—-》Home退至后台—-》Launcher界面重新启动,这样就没问题了。

开始,我也很纳闷,看他操作也的确这样,经过分析发现有个地方露出了马脚,就是第一次启动App的操作。最开始安装时通过第三方安装器安装,完了直接在第三方应用里面点击“打开”按钮。 而杀掉进程后的操作,是直接从Launcher界面启动的。这里肯定会涉及进程问题,及第三方应用启动与Launcher启动App的PID是不一样的。

分析

比如:从第三方应用启动App时,它的taskId 为 300,回到后台,再从Launcher点击Icon启动,它的taskId还是为300.这时如果你的MainActivity是设置成singleTask,那么它会把你上面的所有界面都clear掉。 这也是为什么第一次启动停留在第二级界面,但从Launcher第二次启动时,会重新启动,停留在首页的原因。因为第一次的二级界面都被第二次启动的MainActivity给Clear掉了。

解决办法

网上有篇文章介绍了几种解决方法,这里我只说下一种: 在Launch界面,判断它是不是在根栈。如果不是,证明已经有在别的任务栈启动了,则直接finish退出。

protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //如果是从第三方应用安装后直接打开,退至后台后,再从Launcher打开App,则第二次打开会 //被压入至第一次的任务栈中,此时如果MainActivity设置成SingleTask,则它会清掉它上面的所有Activity. //这里的做法,就是当第二次从Launcher启动App时,在启动页创建的时候判断下它所在的任务栈,是不是根栈。 //若不是,则直接finish,不让其进入MainActivity. if (!isTaskRoot()) { finish(); return; } } 参考资料

http://blog.csdn.net/zhangcanyan/article/details/52777265



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3