Android 第三方打开App后现Launcher打开导致重启的问题
来源:互联网 发布:手机淘宝网打不开 编辑:程序博客网 时间:2024/05/21 17:05
这暂且做一个备忘录
问题
第一次遇到这个问题,测试同学说:
每次第一次安装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
阅读全文
1 0
- Android 第三方打开App后现Launcher打开导致重启的问题
- Android应用安装后打开,按Home键切出应用后再点击桌面图标返回导致应用重启问题及再次把app唤醒到前台
- 从第三方打开APP
- 打开第三方地图App
- Android中WebView,打开第三方应用的问题
- Android中WebView,打开第三方应用的问题
- Android中WebView,打开第三方应用的问题
- Android中WebView,打开第三方应用的问题
- ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
- ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
- ios调用第三方程序打开文件,以及第三方调用自己的APP打开文件
- Android 打开第三方应用的方法
- Android 第三方应用的打开
- 【Android】打开第三方App以及系统应用服务
- Android app借助第三方软件打开pdf文档
- Android-----代码实现打开手机第三方应用APP
- 怎么在第三方应用中打开自己的APP
- ios中代码打开第三方app
- RabbitMQ教程之php-amqplib(二)简介、入门
- Binary Tree Right Side View问题及解法
- PPTP+L2TP+SSTP+OPENVPN绝对穿透的动态IP 拨号
- 网上一些《算法(第四版)》习题答案链接
- Android OTA升级原理和流程分析(一)--update.zip包的制作
- Android 第三方打开App后现Launcher打开导致重启的问题
- PAT-L1-009. N个数求和
- 分割字符串split( )
- Android之三大图片缓存原理、特性对比
- list翻页小算法
- 汇编实验二
- nyoj
- dijkstra堆优化(n+mlogm)
- 10个最佳的免费项目管理工具