广播唤起一个界面A 按home键后 点击应用图标应用重新加载未出现界面A

问题 :

    我做的一个视频通话项目,当程序未在界面中来电了,我通过监听来电广播来启动一个通话界面(这时候intent的启动模式Intent.FLAG_ACTIVITY_NEW_TASK)因为当前应用已经完全退出,没有存在Task栈,不这样设置程序会因为找不到存放activity的栈从而崩溃,所以要为启动的童话界面开辟新的Task栈。然后问题来了,在这种情况下,我按home键,退回到设备的launcher界面,这时候我们点击应用的图标,发现并没有显示刚才启动的通话界面 ,而是重新启动了应用。然后按返回键会回到通话界面。

原因:

    因为点击icon图标的时候,程序会自动加载起始界面 这时候也是创建一个新Task栈的过程,了解任务栈的会知道一个参数taskAffinity,他决定了一个界面存放的任务栈。显然启动界面和我的通话界面的taskAffinity不一致,导致了我们启动的新task栈,在我们通话界面栈的上面,所以当我们按返回键的时候 新的task栈界面销毁了,被压在下面的任务站的通话界面就会展示出来。

解决办法

    通过上述分析我们得知就是在点击icon图标的时候新的任务站在我们视频通话任务栈的上面,

 我们需要判断:该意图是打开一个新的任务,还是将后台的应用给提到前台来.
 若是要将应用提到前台来直接将这个Activity结束掉,然后显示出来的Activity就是之前被最小化的Activity.
 因为点击图标的意图会将新启动的Activity置于顶端,而顶端的下面的Activity就是之前被最小化的Activity.
 此时结束掉新启动的Activity,就可以让之前被最小化的Activity 显示出来了.

可以在程序的入口界面添加如下判断


if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
    finish();
    return;
}

扫描二维码关注公众号,回复: 6064226 查看本文章

从而解决上述的问题。具体对两句话的理解大家还可以自行研究

猜你喜欢

转载自blog.csdn.net/rfgreeee/article/details/73879000