(1)android入门函数理解,tutorial-android项目的MyApplication类分析
2016-07-14 11:22
393 查看
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类内的一个静态类,
相关文章推荐
- Android之 Notification 的多种用法--带你了解通知栏的用法
- Android中SQLite应用详解
- Android广告位循环轮播图的实现
- Android 开发系统自带语音模块应用
- 说说实际开发中的那些冲突
- Android提高第七篇之XML解析与生成
- 【Android实测】调起系统浏览器打开指定页面代码
- Android中Acitvity跳转动画效果实现
- android基础
- Unity5学习心得-2D
- Android Studio apk 打包流程
- Android提高第六篇之BroadcastReceiver
- 网页分享到微信
- iOS app提交审核
- 下载多个平台并运行一个实例
- Android提高第五篇之Service
- Android开发中常用的工具类整理
- Android开发中常用的工具类整理
- IOS之同步请求、异步请求、GET请求、POST请求
- Android触控事件