一、Application的定义
Application可以说是类似于Activity、Service之类的系统组件,一般当我们创建一个Android应用时系统都会默认创建一个Application。当然我们也可以自己写一个MyApplication继承自Application对象,但前提是要在 Mainfest.xml 进行注册。
所以Application是为了保存全局变量的基本类,实现为单例模式。Application的生命周期也是最长的,它的生命周期等同于整个程序的生命周期。
二、Application的作用
Application的作用包括:
数据传递,数据共享和数据缓存,下面分别详细讲下:
通过Application数据传递:
假如有一个Activity A, 跳转到 Activity B ,并需要推荐一些数据,通常的作法是Intent.putExtra() 让Intent携带,或者有一个Bundle把信息加入Bundle让Intent推荐Bundle对象,实现传递。但这样作有一个问题在 于,Intent和Bundle所能携带的数据类型都是一些基本的数据类型,如果想实现复杂的数据传递就比较麻烦了,通常需要实现 Serializable或者Parcellable接口。这其实是Android的一种IPC数据传递的方法。如果我们的两个Activity在同一个 进程当中为什么还要这么麻烦呢,只要把需要传递的对象的引用传递过去就可以了。
基本思路是这样的。在Application中创建一个HashMap ,以字符串为索引,Object为value这样我们的HashMap就可以存储任何类型的对象了。在Activity A中把需要传递的对象放入这个HashMap,然后通过Intent或者其它途经再把这索引的字符串传递给Activity B ,Activity B 就可以根据这个字符串在HashMap中取出这个对象了。只要再向下转个型 ,就实现了对象的传递。
通过Application进行数据缓存:
我一般会习惯在application中建立两个HashMap一个用于数据的传递,一个用于缓 存一些数据。比如有一个Activity需要从网站获取一些数据,获取完之后我们就可以把这个数据cache到Application 当中,当页面设置到其它Activity再回来的时候,就可以直接使用缓存好的数据了。但如果需要cache一些大量的数据,最好是cache一些 (软引用)SoftReference ,并把这些数据cache到本地rom上或者sd卡上。如果在application中的缓存不存在,从本地缓存查找,如果本地缓存的数据也不存在再从网 络上获取。
三、Application的方法
当自定义一个Application继承Application时,会调用四个方法:
onCreate():在创建应用时创建
onTerminate():在终止应用程序对象时调用。在真机里不会调用这个方法。
onLowMemory():当后台程序已经终止资源但还匮乏时调用
onConfigurationChanged():配置改变时调用
注意:android程序的入口并不是Activity的OnCreate()方法,而是Application的OnCreate()。
四、Application简单实用的代码:
1.全局的数据传递:
public class BookApplication extends Application{
public static BookApplication instance;
public int cartNum = 0;
@Override
public void onCreate() {
super.onCreate();
this.instance = this;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
}
@Override
public void onLowMemory() {
// TODO Auto-generated method stub
super.onLowMemory();
}
@Override
public void onTerminate() {
// TODO Auto-generated method stub
super.onTerminate();
}
}
2.Application图片缓存:
第一步:先定义一个imageCache类
public class ImageCache{
private final HashMap<String, SoftReference<Bitmap>> mSoftCache;
public ImageCache(Context context) {
mSoftCache = new HashMap<String, SoftReference<Bitmap>>();
}
public Bitmap get(String url) {
final SoftReference<Bitmap> sr = mSoftCache.get(url);
if (sr == null) {
return null;
}
Bitmap bitmap = sr.get();
if (bitmap == null) {
mSoftCache.remove(url);
}
return bitmap;
}
public void put(String url, Bitmap bitmap) {
mSoftCache.put(url, new SoftReference<Bitmap>(bitmap)); //记住这个方法
}
private void flush() {
mSoftCache.clear();
}
}
第二步:在自定义的Application中代码如下:
private ImageCache mImageCache;
public ImageCache getImageCache() {
if (mImageCache == null) {
mImageCache = new ImageCache(this);
}
return mImageCache;
}
到这里就为止了,Application的用途很大,需要牢牢记住。