zoukankan      html  css  js  c++  java
  • 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只是回到后台了

  • 相关阅读:
    Codeviz 分析kernel源程序
    PHP ORACLE 之 "团队合作"[工作中小结]
    关于Xwork的配置对象和XWork第一个程序
    Linux 动态和静态库小结(1)
    XEN Architecture Overview
    Linux Serial Console 配置小结
    使用Bochs调试Linux kernel 随笔 准备
    前端储存的方式
    如何在asp.net webform下使用rdlc
    (原创)mvc中ajax.beginform重复提交的问题解决
  • 原文地址:https://www.cnblogs.com/hsji/p/4696733.html
Copyright © 2011-2022 走看看