(1)android入门函数理解,tutorial-android项目的MyApplication类分析

来源:互联网 发布:java url webservice 编辑:程序博客网 时间:2024/06/10 23:04
package com.hnu.tutorial;import android.app.Application;import android.content.Context;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.QueueProcessingType;public class MyApplication extends Application {    private String tag = this.getClass().getSimpleName();//获取类名MyApplication    public static Context applicationContext;    private static MyApplication instance = null;    @Override    public void onCreate() {        super.onCreate();        applicationContext = this;        instance = this;        initImageLoader();    }    /**     * init imageLoader     */    public void initImageLoader() {        ImageLoaderConfiguration config = new ImageLoaderConfiguration//                .Builder(getApplicationContext()).threadPriority(Thread.NORM_PRIORITY - 2)//                // 设置拒绝缓存在内存中一个图片多个大小                // 默认为允许(同一个图片URL)根据不同大小的imageview保存不同大小图片                .denyCacheImageMultipleSizesInMemory()//                .discCacheFileNameGenerator(new Md5FileNameGenerator())//                .tasksProcessingOrder(QueueProcessingType.LIFO)//                .writeDebugLogs() //                .build();        ImageLoader.getInstance().init(config);    }    public static MyApplication getInstance() {        return instance;    }    /**     */    public void logout() {    }

}

1 对于这个程序中类为何要extends Application ?

Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息。通常我们是不需要指定一个Application的,这时系统会自动帮我们创建,如果需要创建自己 的Application,也很简单创建一个类继承 Application并在manifest的application标签中进行注册(只需要给Application标签增加个name属性把自己的 Application的名字定入即可)。

android系统会为每个程序运行时创建一个Application类的对象且仅创建一个,所以Application可以说是单例 (singleton)模式的一个类.且application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局 的单例的,所以在不同的Activity,Service中获得的对象都是同一个对象。所以通过Application来进行一些,数据传递,数据共享 等,数据缓存等操作。

2 public static Context applicationContext;

Context字面意思上下文,位于framework package的android.content.Context中,其实该类为LONG型,类似Win32中的Handle句柄,很多方法需要通过 Context才能识别调用者的实例,比如说Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的 实例为Activity,而到了一个button的onClick(View view)等方法时,我们用this时就会报错,所以我们可能使用ActivityName.this来解决,主要原因是因为实现Context的类主要有Android特有的几个模型,Activity、Service以及BroadcastReceiver。

Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型。同时启动应用级的操作,如启动Activity,broadcasting和接收intents。

我们可以使用application context。application context伴随application的一生,与activity的生命周期无关。application context可以通过Context.getApplicationContext或者Activity.getApplication方法获取。

3. ImageLoaderConfiguration.Builder(getApplicationContext()) 虽然getApplicationContext()方法返回的是一个Context对象,可是此法既不是静态方法,有没有示例对象来调用这个方法,直接使用就可以吗?

图片的OOM问题:
android系统的app的每个进程或者每个虚拟机有个最大内存限制,如果申请的内存资源超过这个限制,系统就会抛出OOM错误。跟整个设备的剩余内存没太大关系。比如比较早的android系统的一个虚拟机最多16M内存,当一个app启动后,虚拟机不停的申请内存资源来装载图片,当超过内存上限时就出现OOM。
而貌似ImageLoaderConfiguration.Builder是为了解决OOM问题的?
Android三种基本的加载网络图片方式,包括普通加载网络方式、用ImageLoader加载图片、用Volley加载图片

Android利用universal-image-loader异步加载大量图片,请参考http://www.cnblogs.com/bhlsheji/p/5265571.html

Build是ImageLoaderConfiguration类内的一个静态类,





1 0
原创粉丝点击