记一次从SingleInstance打开APP无反应问题处理办法

作者 : 开心源码 本文共1157个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共131人阅读

问题形容:

项目有个需求,当收到推送的时候,应用弹出一个弹框,点击弹框可以跳转至APP内相应的页面查看详细信息。当APP已经是打开状态的时候,收到消息,弹出弹框,点击并且跳转,这没有什么问题。问题出现在,当APP已经退出了,这时候再收到消息,可以弹出弹框,点击弹框仍旧可以跳转,这里我们做了解决,当客户点击返回的时候,我们会回到主界面,但是当第二次消息再次送达时,点击弹框,此时不会再进行跳转了。

问题起因:

经过排查发现,当从SingleInstance start Activity的时候,实则是默认带上 FLAG_ACTIVITY_NEW_TASK 的,这个flag大家应该都挺熟习,当我们用非Activity或者Fragment的Context Start Activity的时候,都需要带上这个flag,不然会报错。那么为什么在APP退出的状态下点击跳转,第一次可以跳转而第二次不能跳转呢?这就是FLAG_ACTIVITY_NEW_TASK这个标志位搞的鬼,第一次的时候,由于我们的APP是未开启的状态,所以,是没有相应的Task的,这时候即可以正常的跳转。当点击返回,由于做了特殊解决,使APP回到首页,这时候,我们的Task就形成了。由于我们打开的Activity和MainActivity都是同一个Task的,所以,从SingleInstance Start的时候,假如这个Task存在,就会把这个Task拉到前端了,所以,这就是为什么第二次点击了,没反应的问题,由于,APP已经在前端了。假如这个时候,我们按Home键返回桌面,再次点击弹框跳转,会发现APP回到前端了,但是依旧没有打开我们想要跳转的Activity,这恰好验证前面的说明。下面是Google对SingleInstance的说明。

A “singleInstance” activity, on the other hand, permits no other activities to be part of its task. It’s the only activity in the task. If it starts another activity, that activity is assigned to a different task — as if FLAG_ACTIVITY_NEW_TASK was in the intent.

问题处理:

我启动的这个Activity在AndroidManifest里面实则是公告为SingleTask的LaunchMode的,但是仍是会出现这个问题。所以这里,就我而言,我在启动这个Activity的时候,同时设置了两个flag FLAG_ACTIVITY_NEW_TASK 和 FLAG_ACTIVITY_CLEAR_TOP,实则也是达到SingleTask的效果,运行,问题处理。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 记一次从SingleInstance打开APP无反应问题处理办法

发表回复