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只是回到后台了

  • 相关阅读:
    js如何将字符串作为函数名调用函数
    js如何生成[n,m]的随机数
    UIMenuController,UIPasteboard:复制,粘贴详细解释
    python2.7和 python3.4但是不要
    Android IPC通信和AIDL技术应用
    可穿戴式智能设备,其潜在的安全问题?(上)
    CentOS安装KVM步骤虚拟机,绝对实用!
    Python于*args 和**kwargs使用
    uva 1556
    JSCover+WebDriver/Selenium获得JS 代码覆盖
  • 原文地址:https://www.cnblogs.com/hsji/p/4696733.html
Copyright © 2011-2022 走看看