问题描述:
应用需求首次打开app,进入SplashActivity页面,如果支持一键登录功能,
直接跳转到闪验sdk(创蓝闪验集成三网运营商)一键登录页面,该sdk中页面只支持代码定制UI以及接口返回控制,有点坑。当进入一键登录页面,切换到app的账号密码登录页面,使用账号密码登录成功跳转到app首页之后,连续按2次返回键,finish掉当前主页,app回到桌面,这个时候如果从近期任务进入app,发现没有进入splash页面-判断token有效-静默成功登录到主页,而是直接进入了账号密码登录页面,匪夷所思,怀疑人生了,按照正常流程是返回键finish掉了栈里面的全部activity,下次近期任务进入也是从SplashActivity开始,静默登录到主页。。。

问题排查:
SplashActivity—android:launchMode=“standard”
PwdLoginActivity—android:launchMode=“singleTask”
闪验sdk一键登录 ShanYanOneKeyActivity— android:launchMode=“singleTask”
MainActivity—android:launchMode=“singleTask”

SplashActivity、PwdLoginActivity、MainActivity是自己的app中的代码,没有设置任何的taskAffinity,默认都是在同一个任务栈中运行的,排查了ShanYanOneKeyActivity也配置的一样的taskAffinity,应该都是在一个task栈中,全部finish掉了,近期任务打开就应该的SplashActivity啊,这个是理论上的,实际还是需要验证,有没有更直观的方法呢?百度

adb shell dumpsys activity activities|findstr “app进程的名字”,运行后结果如下,可以直观的看到当前的activity属于哪个任务栈的

分析发现,首次启动应用
首次打开SplashActivity,查看当前的所属任务栈ID为 t49000,支持一键登录
自动跳转到一键登录页ShanYanOneKeyActivity,所属任务栈ID为 t49000(SplashActivity再执行 finish操作),
再次切换到 PwdLoginActivity账号密码登录页面,发现所属任务栈ID为 t49001
之后输入账号密码跳转到主页(PwdLoginActivity再finish),发现所属任务栈ID为 t49001
连续2次返回键,finish掉自己,退回到桌面了,再次近期任务进入,问题复现
进入PwdLoginActivity,发现所属任务栈ID为 t49001

也就是说,首次从ShanYanOneKeyActivity跳转到PwdLoginActivity切换了任务栈,导致
PwdLoginActivity、后面的登录成功页面都在 t49001 中运行,返回键退出了t49001栈中所有的界面,再次从近期任务进入,会打开该任务栈的入口,也就是PwdLoginActivity界面。

问题来了,为啥ShanYanOneKeyActivity跳转到PwdLoginActivity会创建新的任务栈,而不是t49000呢???

通过编写简易demo最终发现问题,

t49000栈中只有ShanYanOneKeyActivity,跳转到PwdLoginActivity,如果是先finish 自己 ShanYanOneKeyActivity,再跳转到
PwdLoginActivity,就会创建一个新的任务栈,如果是先跳转到PwdLoginActivity,再finish自己,就会共用一个任务栈ID为 t49000。至于具体原因,猜测是先finish自己,栈被回收了,这个时候打开PwdLoginActivity 不能复用t49000,所以创建新的,有待验证。

排查代码,发现再接入一键登录时候,复制demo的代码,默认true 先finish后跳转,导致出现这个问题。

改正为自己控制,打开的密码登录页,再关闭一键登录页面,会复用了上一个栈,问题解决。

总结
任务栈启动模式看似简单,内部原理很复杂,遇到问题再研究吧。。。

一些实用的命令
adb shell dumpsys activity activities|findstr com.example.myapplication

adb shell dumpsys activity activities|findstr mFocus

10.27
activity1跳转到activity2,没有问题

  Intent intent = new Intent(LotteryActivity.this, RecordActivity2.class);intent.putExtra("type", type);intent.putExtra("type2", type2);LotteryActivity.this.startActivity(intent);

如果使用activity1使用 ApplicationContext跳转到activity2,必须携带newtask,
因为不知道当前属于哪个栈,否则报错

android.util.AndroidRuntimeException: Calling startActivity() from
outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK
flag. Is this really what you want?

Intent intent = new Intent(getApplicationContext( ), RecordActivity2.class);
intent.putExtra(“type”, type);
intent.putExtra(“type2”, type2);
LotteryActivity.this.startActivity(intent);

需要添加

  intent.setFlags(FLAG_ACTIVITY_NEW_TASK)

导致新的activity,以及后面的activity,都在一个新的task栈运行!!!!!!

记一次android任务栈页面跳转问题相关推荐

  1. 【Android】实现页面跳转

    对比html,安卓的页面跳转要难的多. html只需要一个a标签即可实现页面的跳转,而安卓要分三步走 第一步 在activity_main.xml创建一个按钮 <Buttonandroid:id ...

  2. 【Android基础】页面跳转与传值(Activity跳转与传值)

    一个Android应用程序很少会只有一个Activity对象,如何在多个Activity之间进行跳转,而且能够互相传值是一个很基本的要求. 本次我们就讲一下,Android中页面跳转以及传值的几种方式 ...

  3. .Net程序猿玩转Android开发---(11)页面跳转

    在不论什么程序开发中,都会遇到页面之间跳转的情况,Android开发也不例外.这一节,我们来认识下Android项目中如何进行页面跳转.页面跳转分为有參数和无參数页面跳转,已经接受还有一个页面的返回值 ...

  4. Android入门(四)——页面跳转

    目录 一.如何创建多个页面 二.如何进行页面跳转 1.传递参数方式一 2.传递参数方式二(传递多个参数) 三.设置页面自动跳转(用到线程) 四.Activity生命周期 一.如何创建多个页面 一个ac ...

  5. Android studio 关于页面跳转问题

    一是在MainActivity跳转到另一个页面的Activity,如果只是跳转页面布局,则没有这个页面的相关功能. protected void onCreate(Bundle savedInstan ...

  6. android数据回传多个页面_Android Day06四大组件之Activity多页面跳转和数据传递

    ToolBar中menu无法同时显示图标和文字问题的解决方法 Toolbar添加返回按钮 ToolBar与ActionBar 1.什么是Activity 官方文档是这么说的:Anwhich users ...

  7. android 跳转动画黑屏,Android8.0 适配解决页面跳转过程出现短暂黑屏的问题

    小菜在适配 Android8.0 过程中,遇到很多问题,有很多很常见的问题,今天来整理一下页面跳转时黑屏的问题. 问题猜测 猜测一: 显示 Activity 页面之前会优先开启一个 Starting ...

  8. 解决部分android手机页面跳转的黑白屏、闪屏、显示桌面背景问题

    解决部分android手机页面跳转的黑白屏.闪屏.显示桌面背景问题 关于 修改后的方案效果图 问题思路及解决办法 最终方案 关于   今天在查看登录页面美观度的时候意外发现手上的oppo手机在页面跳转 ...

  9. android上方导航条跳转页面,《成为大前端》系列 7. 多页面、页面跳转和Navigation模块...

    介绍 开发过移动 Web 页面的同学都知道,单个页面由客户端的 UI 所承载,页面间的跳转也 不再是使用 window 和 location,也不是使用 a 标签,而且调用 Native 写好的 br ...

最新文章

  1. [唐诗]182宫中行乐词(其一)-李白
  2. python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击
  3. Oracle八大性能视图之v$sort_usage_temp
  4. vuecli3修改html,vue-cli3多页应用改造
  5. 苏联当年有多少应该拿菲尔兹奖的数学家被黑了?
  6. 《电脑报》:中国“人肉搜索第一案”幕后之谜
  7. 有关VS2008制作安装包时遇到的问题详解
  8. Hibernate3动态条件查询
  9. java beanutil 工具类_Apache Commons BeanUtils PropertyUtils工具类操作Java Bean属性
  10. 【CS229机器学习】作业 Problem Set #1 有监督学习
  11. snmp trap 如何在浏览器中_SNMP TRAP功能
  12. 设计模式---订阅发布模式(Subscribe/Publish)
  13. Eclipse+Java+Swing实现宠物商店管理系统
  14. 安卓模拟器自动抓取某红书晒单数据
  15. 科学计算基础软件包NumPy入门讲座(4):操作数组
  16. iPhone 换电池 检测新电池实际容量
  17. 图像/图片怎么resize?
  18. 5G时代带动陶瓷PCB成长——GPS陶瓷天线调试方法 (一)
  19. nginxssl证书配置
  20. python打印输出五角星

热门文章

  1. jvm.option是什么,它是如何加载的
  2. 干趴网络协议:IS-IS 特性
  3. C++基础2:ASC码中 ‘A’ 和 ‘a’ 分别在什么位置??
  4. loj10155:数字转换:树的直径问题
  5. 大一新生HTML期末作业,网页制作作业——明星介绍易烊千玺网站HTML+CSS
  6. 用uc浏览器Scheme打开网址方法
  7. dede首页调用全站tag
  8. 青鸟锦江学员车宏鑫正面回答面试官的十大面试问题
  9. emd_visu函数_EMD方法基本基本知识
  10. axure 8 表格合并_Word页面布局、“插入”选项卡及表格部分考点梳理