Android按下home键后从新打开app进入主activity的问题

问题阐述:

  当咱们写一款App的时候,势必会有这种状况:用户已经进行了多级的操做,现返回栈中已存在多个activity,那么这个时候咱们想回到最初的activity难道要一层层的返回吗,对用户来讲 无疑是一个很差的操做体验,这个时候咱们就想到了android的四大启动模式,四大模式的详情请自行查询学习,singleTask就是四大启动模式其中的一个,使用了singleTask模式的activity会在当前的返回栈中有且只有一个实例,当咱们须要从新调用这个activity 的时候,并非new 一个该activity,而是从返回栈中直接调用这个已存在的实例,并将之其上的全部activity清空,保持返回栈中有且仅有其一个activity实例。android

  那么,说了这么多,与本文有什么关系呢?后端

  先来讲一下 个人app需求:第一个activity为登陆页,登陆后保存用户数据,进入主页,除了修改密码和退出登陆外其余操做都应当自动登陆,实现用户点击app后 直接进入主页的效果缓存

  最初,笔者也是以为singleTask模式很是的方便,而且没发现什么缺点。but   把apk打包给后端小哥测试的时候,他发现当用户点击home键返回系统桌面的时候,这个时候从新点击启动app会发现,并无显示关闭以前的那个activity,而是进入了登陆页面。这是,笔者第一个想到的是 会不会本地缓存的用户数据被清掉了,感受去检查了一下,发现用户数据还在。app

  那是什么问题呢,以后又考虑到会不会是home键按下后,须要作一个home键的监听拦截,可是这样有些得不偿失,由于拦截下来仍是得关掉全部的activity。学习

  死来想去,想一想数据也在,可是没有自动登陆,会不会是查询本地用户缓存数据的方法没有执行到呢?一番排查,发现只有第一次进入app的时候这个验证本地数据的方法才被调用了,以后按下home键后再打开app并不会执行该方法,那么就能解释为何 按下home键后在进入程序不会自动登陆到主页,而是打开登陆页了。测试

  但是,为何没有执行到呢?3d

解决方案:

  想了一下,验证本地数据的方法我是在onCreate()方法中进行调用的,而singleTask启动模式,调用已存在的activity实例倒是调用的onNewIntent()方法,那么相对应的在onCreate()中调用的验证本地用户缓存数据的方法势必要在onNewIntent()从新调用一下。果不其然,调整以后,问题解决了。(下面附上 自动登陆方法 和onCreate()、onNewIntent()的方法体 )blog

相关文章
相关标签/搜索