做jee的童鞋肯定都知道一点, 就是有些变量是要放在ServletContext中的, 因为ServletContext是不会销毁的(除非服务器宕机了).
那么我们在Android里面是不是也有类似ServletContext这种东东存放全局变量呢.? 答案是肯定的.
首先我们了解下为什么要把某些东东存在全局变量里面.
android有一种机制, 在内存不足的前提下优先考虑杀死在后台的Activity(生命周期处于onStop的), 然而这个Activity里面有一些与用户交互的或者是其他的一些数据还未保存.?
怎么办呢?
1:你可以重写Activity的onSaveInstanceState和onRestoreInstanceState方法, 在onSaveInstanceState方法中保存需要的一些数据,onRestoreInstanceState再把这些数据拿过来
2:我们可以在Activity的onStop方法里面把这些值存在全局变量里面
Android提供了一个类似于ServletContext的全局变量, 叫Application. 我们可以利用它存储一些全局变量!
那么有人会问了, 内存不足不是你的东西会被系统杀掉吗?
大家请明白一点, 因为内存不足杀掉Activity/Service等一些组件,那也只是杀掉一些线程而已.! 我们这里的Application就是你的进程, 每个应用在android的Linux系统中
都会是一个单独的进程, 除非是出了异常或者手动被杀掉, 不然一旦应用程序运行之后,进程是不会被杀的.
也就是说, Android只是杀掉某个或者某几个Activity, 或者是直接把某个Task给结束掉而已, 所以我们可以放心大胆的把某些全局变量存在Application里面.
而且Application生命周期方法里面还有个onTerminate方法, 当被终止的时候我们还可以把这些全局变量存起来, 下回onCreate的时候再恢复.
这里我推荐大家在用Appcation存值得时候在Application里面写一个Map就好了, 因为变量太多得话会显得那个类很臃肿.
下面给出示例:
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import android.app.Application;
public class MyApplication extends Application {
private Map<String, Object> mData;
public Map<String, Object> getmData() {
return mData;
}
@Override
public void onCreate() {
super.onCreate();
mData = new HashMap<String, Object>();
//synchronized the map
mData = Collections.synchronizedMap(mData);
// then restore your map
}
public void onTerminate() {
super.onTerminate();
//save data of the map
}
}
然后在AndroidManifest里面配置<application>节点的属性
<application android:name=".MyApplication">
.....
最后, 写个测试的Activity, 调用getApplication方法, 就欧了
分享到:
相关推荐
使用Application做全局变量
Android中用Application类实现全局变量
Android用Application设置全局变量以及使用 如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅...
Application设置全局变量以及传值 /** * 重写Application,主要重写里面的onCreate方法,就是创建的时候, * 我们让它初始化一些值,前段时间在javaeye里面看到过一个例子,与此相似, * 我做了些改进。听说外国...
本文实例讲述了Android编程之Application设置全局变量及传值用法。分享给大家供大家参考,具体如下: /** * 重写Application,主要重写里面的onCreate方法,就是创建的时候, * 我们让它初始化一些值,前段时间在...
Android-Application被回收引发空指针异常分析(消灭全局变量)-例子 http://blog.csdn.net/zivensonice/article/details/51451486
3 在传数据类中获取全局变量Application对象并设置数据 myApp MyApp getApplication ; myApp setName "jack" ; 修改之后的名称 4 在收数据类中接收Application对象 myApp MyApp getApplication ;">在...
asp.net聊天室,用application全局变量实现功能,参考别人,结合自己的,最终的效果,挺不错的
Application 生命周期&全局变量
本文实例讲述了Android编程中全局变量。分享给大家供大家参考,具体如下: 现在每天都在忙,而且一忙起来,就把写笔记的事情放在了后面,最近在写程序的时候,突然要使用全局变量,就按照以前的方式,写了一个类,...
使用Application做android完全退出系统实例
Wrox Professional Android 2 Application Development
If you’re an experienced developer, you can start creating robust mobile Android apps right away with this professional guide to Android 4 application development. Written by one of Google’s lead ...
经典书籍,强烈建议阅读E文版(目前这个版本也没有中文的)。 附随书代码
the Android SDK, and using location-based services Details how to package and publish your applications to the Android Market Beginning Android 4 Application Development pares down the most essential...
Android Studio Application Development
在android中必须要有一个application,那我们用第三方的时候多个application如何使用,这是一个demo,值得你看一下
Android操作Application的代码例子。用于演示通过Application来实现读写内存的功能,其中Application实例需要采用单例模式。