Android 处理用户被迫下线

Android应用如果跟账号相关,一般都不允许一个账号在多台设备上同时登录,当发生这种情况的时候就要把页面跳转到登录页要求用户重新登录。下面是发生这种情况的时候应用回退栈的情况:

这时有下面几种可能发生的情况:

1.用户使用刚才的账号重新登录:

   在启动HomeActivity的时候,只要加上 Intent.FLAG_ACTIVITY_CLEAR_TOP标志就可以把HomeActivity上面的Activity弹出,使HomeActivity成为栈顶。

2.用户使用另外一个账号登录:

   按照上面的方法,还要确保HomeActivity重新获得屏幕焦点的时候,显示当前用户的信息,而不是之前用户的信息(简单的实现就是把加载页面的工作放在onResume()方法里)

3.用户直接点击返回键退出时:

  可以直接调用   android.os.Process.killProcess(android.os.Process.myPid());  简单粗暴地结束掉当前进程。

上面针对的都是一些简单的情况,实际工作的时候遇到的情况要比这个复杂得多。工作当中的HomeActivity往往包含一个viewpager,viewpager又对应了多个Fragment。在这个前提下,发生上述第二种情况的时候简直就是一场灾难(每个fragment都要恢复为当前用户的状态)!下面是我当前项目中的HomeActivity示意图。下面是一个tab栏,每个标签都对应一个fragment。

如果按照之前的方法,就是老老实实维护每个fragment的状态,使他们始终与当前用户保持同步。但是逻辑太复杂了,把所有情况都考虑到写出来的代码就没法看了!

继续回到我们的问题,其实问题的本质就是非栈顶Activity的维护问题。如果我们跳转到登录页的时候,栈底没有任何Activity,这样不就跟初次登录时一样了,一切问题不都迎刃而解了吗?

下面是我的思路:

在Application里面维护一个Activity列表,Activity创建时把自己加入这个列表中,销毁时把自己从这个列表中移除。如果Activity只是回到后台了

原文地址:https://www.cnblogs.com/hsji/p/4696733.html