在 Android 中使用全局变量,除 public 静态变量,还有就是使用 android.app.Application。 Android系统 会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (singleton)模式的一个类所以在不同的Activity、Service中获得的对象都是同一个对象,所以通过 Application来进行一些,数据传递,数据共享等,数据缓存等操作。 在启动 Application 时,系统会创建一个 PID,就是 进程ID,所有的 Activity 会在此进程上运行,在创建 Application 时初始化全局变量,同一个应用的所有 Activity 都会获取这些全局变量的值,可用于保存登录状态。Application中的全局变量值会在 Activity中被改变,其生命周期等于整个程序的生命周期 注:1> 在 Application 类中,其onCreate()方法,是Android应用程序真正的入口,将会会在所有 Activity,Service,Receiver组件之前调用        2> 在Android中,可以通过继承Application类来实现应用程序级的全局变量,这种全局变量方法相对静态类更有保障,直到应用的所有Activity全部被destory掉之后才会被释放掉
       3> 在组件之间传递信息:在自定义的 Application中设置成员变量这样在Activity、Service、Fragment等之间通过获取Application实例来访问其中成员变量        4> 如果需要 cache一些大量的数据,最好是cache一些 (软引用)SoftReference ,并把这些数据cache到本地rom上或者sd卡上。如果在 Application中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在,再从网络上获取        5> 使用Application如果保存了一些不该保存的对象很容易导致内存泄漏。如果在Application的oncreate中执行比较 耗时的操作,将直接影响的程序的启动时间。一些清理工作不能依靠 onTerminate 完成,因为 Android会尽量让程序一直运行,所以很有可能 onTerminate不会被调用
使用方式 (1)在AndroidManifest.xml中在标签中添加android:name="...",其中设置 Applicationl类的 如: <application
android:name=".CombankDroid" android:icon="@drawable/first_aid" android:label="@string/app_name" > ...
application>
(2)创建 Application 类,该类继承于 android.app.Application 如: public class CombankDroid  extends Application {
private boolean isLogin;
public boolean isLogin(){
return isLogin
}
public void setIsLogin( boolean b){
    isLogin     isLogin = b;
}
}
(3)在Activity中使用,通过  Application 类实例,再通过该类中的方法获取相关数据 获取 在Service 和 Activity 中获取  Application 的三种方法:         1>  getApplication() : 如 CombankDroid combankDroid = ((CombankDroid)getApplication())         2>  getApplicationContext() : 如 CombankDroid combankDroid = ((CombankDroid)getApplicationContext())         3>  getApplicationInstance() : 如 CombankDroid combankDroid = CombankDroid.getApplicationInstance()             注:getApplicationInstance()用在获取不到context对象的类中         4> 将要操作的属性设为静态方法就可以直接调用 如:MyApplication.info.getUserName() 如: class Anyhow  extends Activity {
@Override public void onCreate(Bundle b){
...
CombankDroid combankDroid = ((CombankDroid)getApplicationContext());
if (!combankDroid.isLogin()) {
redirectToLoginActivity();
else {
loadUi();
}
...
} ...
}
Application中存储数据存在的问题 由于Application 对象不会一直呆着内存里面,它会被kill掉,比如启动 App后将数据存储在Application中点击 Home 键离开App几小时后,再返回App,此时实际上App不会重新启动,Android 系统会创建一个新的Application对象,然后再启动上次用户离开时的Activity以此造成App从来没有被Kill掉的假象,此时在获取Appication中的数据将会出现异常。针对这种问题,可根据情况采用其它的方式:
    1>  直接将数据通过intent传递给 Activity     2>  使用官方推荐的几种方式将数据持久化到磁盘上     3>  在使用Application中的数据时,总是要对变量的值进行非空检查 注:对 Application对象有用,对你app里面的单例对象(singleton)或者公共静态变量(public static)同样适用

更多相关文章

  1. Android 数据存取
  2. Android 之 使用File类在SD卡中读取数据文件
  3. android SQLite数据库用法图文详解(附源码)
  4. [android]数据库SQLiteDatabase简介
  5. Android数据库应用(《Android开发入门与实战》选摘)
  6. Android中使用Gson解析JSON数据,以及把JSON数据映射成一个对象
  7. Storm——Android SQLite数据库管理类库
  8. Android 监听ContentProvider中数据的变化 Android 监听ContentP
  9. Android 存储字符串数据到txt文件

随机推荐

  1. Android客户端每周自动化回归报告
  2. android 通过主题设置activity统一切换动
  3. 手把手教你搭建Android开发环境(一)
  4. Android(安卓)解决BitmapFactory.decodeF
  5. Demo_ ZoomActivity 解读
  6. android之从第三方启动自己的apk
  7. MQTT在Android中的使用
  8. 利用OpenGL ES、手机传感器、相机和调用
  9. android——点击按钮时更改按钮样式
  10. 数据类型转换与检测-变量与常用声明