开课吧Android培训技术学院为大家精选Android学习基础知识。开课吧Android培训技术学院(原无限互联Android培训技术学院)面向0基础,4个月学习即可让你步入Android开发世界,让你成为不一样的程序员!挑战高薪,从此刻做起。
1、Android基础学习:触屏事件分发机制
(1)ViewGroup和View组成了一棵树形结构,最顶层为Activity的ViewGroup,下面有若干的ViewGroup节点,每个节点之下又有若干的ViewGroup节点或者View节点。
(2)当一个Touch事件到达根节点,即Acitivty的ViewGroup时,它会依次下发,下发的过程是调用子View(ViewGroup)的dispatchTouchEvent方法实现的。简单来说,就是ViewGroup遍历它包含着的子View,调用每个View的dispatchTouchEvent方法,而当子View为ViewGroup时,又会通过调用ViwGroup的dispatchTouchEvent方法继续调用其内部的View的dispatchTouchEvent方法。
(3)ViewGroup的dispatchTouchEvent是真正在执行分发工作,而View的dispatchTouchEvent方法,并不执行分发工作,或者说它分发的对象就是自己,决定是否把touch事件交给自己处理,而处理的方法,便是onTouchEvent事件。
开课吧Android培训技术学院:Android基础学习
2、Android基础学习:什么是ANR,如何避免它?
答:ANR:Application Not Responding(应用程序无响应)。在Android中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应,当用户操作在5s内应用程序没有响应,BroadcastReceiver在10秒内没有执行完毕,就会出现应用程序无响应对话框。
ANR的分类
KeyDispatchTimeout(5 seconds) –主要情况 :按键或触摸事件在特定时间内无响应
BroadcastTimeout(10 seconds) :BroadcastReceiver在特定时间内无法处理完成
ServiceTimeout(20 seconds) –小概率类型 :Service在特定的时间内无法处理完成
ANR的解决和避免方法
(1)Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。
(2)耗时的操作,例如网络或数据库操作,应该在子线程里完成。
(3)应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。
3、Android基础学习:Android基础学习:什么情况会导致Force Close?
答:程序出现异常,比如NullPointerException。
4、Android基础学习:Android基础学习:谈谈常见OOM的原因和解决办法?
OOM原因
1. 网络加载大量图片
2. 资源对象没关闭造成的内存泄露
解决办法
1. 适当调整图像大小
2. 使用图像缓存
3. 及时回收图像
4.自定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配。
5、Android基础学习:Android加载网络图片,如何实现,如何优化避免出现OOM,(完全自定义,不需要使用第三方工具包)
1.三级缓存
2.使用线程池来管理加载的图片的线程
3.LruCache来管理我们图片内存
//图片缓存技术的核心类,用于缓存所有下载好的图片,在程序内存达到设定值时会将最少最近使用的图片移除掉。
private static LruCache mMemoryCache;
private static ImageLoader mImageLoader;
private ImageLoader() {
// 获取应用程序最大可用内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int cacheSize = maxMemory / 8;
// 设置图片缓存大小为程序最大可用内存的1/8
mMemoryCache = new LruCache(cacheSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
return bitmap.getByteCount();
}
};
}
关键词标签:Android培训,Android学习,Android开发学习,Android技术学院