• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 静态变量的陷阱,静态变量陷阱

静态变量的陷阱,静态变量陷阱

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了静态变量的作用,静态变量,静态局部变量,java静态变量,静态成员变量等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

静态变量的陷阱,静态变量陷阱


我们都知道,静态变量用起来是挺方便的,可是一不小心那就say拜拜了。说一说我在项目中遇到的情况,测试了好多次,最后才发现原因。感动啊!

private static String UserRootPath = "/sdcard/User/"+UserManager.username;

private static String UserCache=UserRootPath+"/path";

目的:

在一个类中,定义了上面两个静态变量,想要实现不同用户登录创建不同的文件夹,UserManager.username为用户名。

然后就掉进坑了。

情况是这样的:

当我登录一个账号A,确实创建了对应文件夹A,但是注销登录,用另一个账号B再次登陆的时候,却不会再创建文件夹了B。Why,捣鼓了好久,在测试过程中发现登录B后,UserManager确实变为B了,可是UserRootPath却还是原来的那个"/sdcard/User/"+A。

 

对于静态变量的陷阱我早有耳闻,所以立马反应过来时静态变量出了问题。

 

原来在关闭activity或者应用之后UserRootPath占用的内存还在,所以再次登录的时候UserRootPath还是原来的值,不会改变,即使这个时候UserManager.username已经发生了改变(创建文件夹的时候在代码中判断该文件夹是否已经存在,因为路径没变,所以判断出来的结果是已经存在,所以就不会再创建了)。事实证明,如果关闭应用后强制kill掉该应用的进程,那么再次登录就不会出现这种情况。

于是我在登陆之后重新给UserRootPath赋值一次。

 

本来以为解决了,却发现B的子目录没有创建(+_+)。

 

原来子目录UserCache引用了UserRootPath,类似于上面的情况,由于UserCache也是静态变量,虽然再次登陆之后UserRootPath改变了,但是UserCache还是之前那个(由于没有重新赋值,所以它里面的UserRootPath还是之前那个没有变)

于是我在登陆之后也给UserCache重新赋值一次。

 

 说到最后就是想说以后用静态变量的时候记得更新变量的值,尤其是静态变量引用了另一个变量的时候,仅仅改变那个被引用的变量是不行的,还要把静态变量的值也更新了。(因为静态变量什么时候被回收具有不确定性)。

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 静态变量的陷阱,静态变量陷阱

相关文章

  • 2017-05-26andriod 获得drawable下所有图片,
  • 2017-05-26通知 listview刷新!一天没搞出来的血泪史,listview血泪史
  • 2017-05-222.3.3 Button(按钮)与ImageButton(图像按钮)
  • 2017-05-26网站偶尔访问不了故障总结
  • 2017-05-26硅谷商城第二版5--个人中心模块,硅谷商城第二版5--
  • 2017-05-26【Android基础】Activity启动模式以及Intent Flags 与 栈 的全面解析
  • 2017-05-26Butter Knife使用详解,butterknife
  • 2017-05-26Android--字符串和Drawable之间互相转化,android--drawable
  • 2017-05-26AndroidStudio项目提交(更新)到github最详细步骤
  • 2017-05-26Android 学习1----控件的学习,android1----

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 安卓工程师笔试--2015--波导公司,安卓--2015--
    • Android学习笔记-ImageView(图像视图),android-imageview
    • 4.2.2 Service进阶
    • Android Studio中使用AIDL进行进程间通信
    • 手把手搭建自己的android环境,把手搭建android
    • 8.3.1 三个绘图工具类详解
    • Android MediaPlayer 音乐播放
    • android源码解析之(三)--)HandlerThread
    • Android 手机卫士--导航界面2,android卫士
    • 仿微信新消息提示音,消息

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有