标签:
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只是回到后台了
标签:
原文地址:http://www.cnblogs.com/hsji/p/4696733.html