您的位置:首页 > 移动开发 > Android开发

单点登录问题和android.view.WindowLeaked(窗体泄露)的解决方案

2014-07-23 14:39 519 查看
http://blog.csdn.net/miracle_of_thinking/article/details/7876907

需要做的是在登录时给每用户生成一个唯一token,客户端请求数据时需携带token标识当前用户,当此帐号在其他设备登录时重新生成token。原来的token就失效了,这样他在原来的设备请求数据时因为token失效让它重新登录。这样就实现了单点登录。

也就是说,只要用户登录就在服务器端生产唯一的一个标示,然后请求数据。加入张三登录生成了a,随后王四登录生成了b,此时王四可以继续访问,当张三访问的时候发现标示错误,然后根据获得的数据提示用户已经登录,请重新登录

窗体泄露

我们知道Android的每一个Activity都有个WindowManager窗体管理器,同样,构建在某个Activity之上的对话框、PopupWindow也有相应的WindowManager窗体管理器。因为对话框、PopupWindown不能脱离Activity而单独存在着,所以当某个Dialog或者某个PopupWindow正在显示的时候我们去finish()了承载该Dialog(或PopupWindow)的Activity时,就会抛Window
Leaked异常了,因为这个Dialog(或PopupWindow)的WindowManager已经没有谁可以附属了,所以它的窗体管理器已经泄漏了。

android.view.WindowLeaked一般会发生在Activity 与Dialog的显示。

       Activity 中create 一个Dialog,若你先关闭Dialog再关闭Activity就是正常的,若你先关闭Activity再关闭Dialog就会报错这个android.view.WindowLeaked错误了。
       分析这个原因是:Dialog是基于Activity而创建的:new ProgressDialog(this);this 就是Activity。 Activtity先finish,那Dialog就没得依附了,所以就会报android.view.WindowLeaked。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: