博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
首页Activity重复启动问题
阅读量:6276 次
发布时间:2019-06-22

本文共 1010 字,大约阅读时间需要 3 分钟。

问题:

Activity有很多种启动方式,app启动,不同app互相调,安装完点打开、点击桌面图标等等。 当activity的launchIntent中的flag不同的时候,就会创建实例,从而导致重复的问题。用户比较容易感知的就是安装完点打开,然后点击home,再点击桌面,此时会出现情况如下:

override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        val myPid = Process.myPid()        LogUtils.d(            """            isTaskRoot:${isTaskRoot}            pid:$myPid            activityList:${ActivityUtils.getActivityList()}            """        )    }复制代码

打印结果:

│ isTaskRoot:true     │ pid:10731     │  activityList:[com.optimais.demo.MainActivity@dfbbc47]    └─────────────────    │ isTaskRoot:false     │ pid:10731     │  activityList:[com.optimais.demo.MainActivity@dfbbc47, com.optimais.demo.MainActivity@c383d34]复制代码

可以看到第二次从桌面直接点击图标启动的时候,pid是相同的,isTaskRootfalse了,栈内压了2个MainActivity

解决:

  1. onCreate里默默的加上一个if(isTaskRoot()) finish()退掉好了。
  2. 更常见的做法是,首页的launchMode通常会设置为android:launchMode="singleTask"栈内唯一即可

转载于:https://juejin.im/post/5c788bcfe51d453eeb0677c1

你可能感兴趣的文章
poj 2777(线段树的节点更新策略)
查看>>
Swift-EasingAnimation
查看>>
[翻译] BKZoomView
查看>>
C++类设计的一些心得
查看>>
tableVIew删除时的delete按钮被挡住时重写的方法
查看>>
读cookie中文字符乱码问题
查看>>
招募译者翻译并发数据结构
查看>>
普通表转换为分区表
查看>>
Java 容器 & 泛型:三、HashSet,TreeSet 和 LinkedHashSet比较
查看>>
性能优化总结(六):预加载、聚合SQL应用实例
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>
关于redis的几件小事(六)redis的持久化
查看>>
package.json
查看>>
webpack4+babel7+eslint+editorconfig+react-hot-loader 搭建react开发环境
查看>>
Maven 插件
查看>>
初探Angular6.x---进入用户编辑模块
查看>>