android无activity启动activity后返回没回到上一个activity

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

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

  先来說一下 我的app需求:第一个activity为登录页,登录后保存用户数据进入主页,除了修改密码和退出登录外其他操作都应当自动登录实现用户点擊app后 直接进入主页的效果

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

  那是什么问题呢,之后又考虑到会不会是home键按下後需要做一个home键的监听拦截,但是这样有些得不偿失因为拦截下来还是得关掉所有的activity。

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

  可是,为什么没有执行到呢

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

我要回帖

更多关于 android无activity 的文章

 

随机推荐