美文网首页
计一个Scheme拉起三方APP,Activity Task 踩

计一个Scheme拉起三方APP,Activity Task 踩

作者: 瀚海网虫 | 来源:发表于2020-01-17 13:00 被阅读0次

    1. 背景

    确切讲 是某手,要拉起某艺 一个春节活动页


    image.png

    home 键 看到,似乎后台进程只有某手,没看到某艺。 某艺的页面在某手中打开了。 粗通Android的测试以为出了玄幻事件。。。

    2 原因

    1、 某艺的webview,Activity 设置的是 android:launchMode="standard"
    2、 某手 拉起时(native端拉起)时,未指定 启动模式

    Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
    startActivity(intent);  
    

    导致看起来像是在某手的进程里,打开了某艺。 (home键完全看不到某艺进程
    ),这其实也没什么大不了的,因为没必要让用户跳出当前app, 至少某手肯定不希望这样。

    如何验证这一点呢? 请不要怀疑Activity 启动流程的科学性~
    一个Activity 要启动,首先先check 自身所在进程有无启动,实际上,当scheme拉起这个活动页的时候,某艺已经启动了,这一点可以通过 adb shell top 命令观察到。 只不过切home键,所见到的task 列表中没展示独立的某艺task 而已。

    问题是后续的操作出了点小麻烦,因为需要在拉起的H5 上,执行登录动作,这一步拉起了某艺自己的登录页面,是个new task 。 导致后续的用户操作不能闭环了(两个task 互相独立,回退栈不同,第二个task栈执行跳转,拉起支付等等,第一个task栈一直还在活动页傻等着呢。。。)

    3 解决

    指定启动模式

    Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);  
    

    后记

    FLAG_ACTIVITY_NEW_TASK 这种也有坑,即用户可能误点击(尤其冷启动三方app,反应慢一些,用户以为没点到,反复点击),这时候可能会导致,打开了多个页面,退出时,要点几次,才能退出。
    后续补一篇 Activity 启动栈的技术文档

    https://developer.android.com/guide/components/activities/tasks-and-back-stack

    相关文章

      网友评论

          本文标题:计一个Scheme拉起三方APP,Activity Task 踩

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