美文网首页
首页Activity重复启动问题

首页Activity重复启动问题

作者: _蘇芳_ | 来源:发表于2019-11-13 11:28 被阅读0次

问题:

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"栈内唯一即可

相关文章

网友评论

      本文标题:首页Activity重复启动问题

      本文链接:https://www.haomeiwen.com/subject/endhictx.html