android面试专题(2)
2016-07-23 11:42
429 查看
android面试专题(3)
Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系)
(1)Handler允许处理Message和Runnable对象。
(2)MessageQueue存储着message和Runnable的队列
(3)Looper控制着handler传递Message(post, sendMessage)和出离Message(handleMessage方法)
ListView的分页实现思路?
通过onScrollListenr监视listView是否滑动底部,也就是第一个可见item+可见item的数量 == 总的item, 即加载新的数据。
Intent的功能, 传递的数据的类型
Intent 连接Acitivity, Service, BroadcastReceiver, ContentProvider的功能。
传递的数据类型: 8中基本数据类型, 以及String, Bundle ,以及实现Serializable或者Paarcelable的类型。
Intent分为显示意图,隐式意图:
显示意图: 调用Intent.setComponent()或intent.setClass()指定组件名, 指定Intent传递个那个组件。
XML解析:
DOM, SAX, PULL;
DOM: 将整个文档读入, 构建一个驻留内存的树结构,然后可以使用, 优点:增删改查方便, 缺点: 占据内存大,
SAX: 基于事件驱动型,占用内存小, 解析速度快, 适合文档的读取, 不适合增删改。
PULL: 基于事件驱动型, android官方API提供, 可随时终止。
android内存的优化
android内存泄露容易导致内存溢出,又称为OOM。
Android内存优化策略:
1)在循环内尽量不要使用局部变量
2)不用的对象即时释放,即指向NULL
3)数据库的cursor即时关闭。
4)构造adapter时使用缓存contentview
5)调用registerReceiver()后在对应的生命周期方法中调用unregisterReceiver()
6)即时关闭InputStream/OutputStream。
7)android系统给图片分配的内存只有8M, 图片尽量使用软引用, 较大图片可通过BitmapFactory缩放后再使用,并及时recycle
8)尽量避免static成员变量引用资源耗费过多的实例。
加载大图片的时候如何防止内存溢出
android系统给图片分配的内存只有8M,当加载大量图片时往往会出现OOM。
Android加载大量图片内存溢出解决方案:(使用缩微图)
1)尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source
2)使用BitmapFactory.Options对图片进行压缩
3)运用Java软引用,进行图片缓存,将需要经常加载的图片放进缓存里,避免反复加载,及时销毁不再使用的Bitmap对象
Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系)
(1)Handler允许处理Message和Runnable对象。
(2)MessageQueue存储着message和Runnable的队列
(3)Looper控制着handler传递Message(post, sendMessage)和出离Message(handleMessage方法)
ListView的分页实现思路?
通过onScrollListenr监视listView是否滑动底部,也就是第一个可见item+可见item的数量 == 总的item, 即加载新的数据。
Intent的功能, 传递的数据的类型
Intent 连接Acitivity, Service, BroadcastReceiver, ContentProvider的功能。
传递的数据类型: 8中基本数据类型, 以及String, Bundle ,以及实现Serializable或者Paarcelable的类型。
Intent分为显示意图,隐式意图:
显示意图: 调用Intent.setComponent()或intent.setClass()指定组件名, 指定Intent传递个那个组件。
XML解析:
DOM, SAX, PULL;
DOM: 将整个文档读入, 构建一个驻留内存的树结构,然后可以使用, 优点:增删改查方便, 缺点: 占据内存大,
SAX: 基于事件驱动型,占用内存小, 解析速度快, 适合文档的读取, 不适合增删改。
PULL: 基于事件驱动型, android官方API提供, 可随时终止。
android内存的优化
android内存泄露容易导致内存溢出,又称为OOM。
Android内存优化策略:
1)在循环内尽量不要使用局部变量
2)不用的对象即时释放,即指向NULL
3)数据库的cursor即时关闭。
4)构造adapter时使用缓存contentview
5)调用registerReceiver()后在对应的生命周期方法中调用unregisterReceiver()
6)即时关闭InputStream/OutputStream。
7)android系统给图片分配的内存只有8M, 图片尽量使用软引用, 较大图片可通过BitmapFactory缩放后再使用,并及时recycle
8)尽量避免static成员变量引用资源耗费过多的实例。
加载大图片的时候如何防止内存溢出
android系统给图片分配的内存只有8M,当加载大量图片时往往会出现OOM。
Android加载大量图片内存溢出解决方案:(使用缩微图)
1)尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存,可以通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source
2)使用BitmapFactory.Options对图片进行压缩
InputStream is = this.getResources().openRawResource(R.drawable.pic1); BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds = false;//图片资源不加载到内存中 options.inSampleSize = 10; //width,hight设为原来的十分一 Bitmap btp =BitmapFactory.decodeStream(is,null,options);
3)运用Java软引用,进行图片缓存,将需要经常加载的图片放进缓存里,避免反复加载,及时销毁不再使用的Bitmap对象
if(!bmp.isRecycle() ){ bmp.recycle() //回收图片所占的内存 system.gc() //提醒系统及时回收 }
相关文章推荐
- JAVA EE 面试题
- 程序员面试50题—指针的用法(5)
- php高级研发或架构师必了解---很多问题面试中常问到!
- 面试题6:重建二叉树(根据前序遍历和中序遍历)
- 常见问题
- 不要做一个浮躁的程序员
- 面试题4:字符串_空格替换
- 互联网职业概述
- 【读书】《程序员的思维修炼》读后感
- 面试基础
- 面试的记录
- Android国内一线互联网公司内部面试题库
- 不会调试的人不是程序员------------------<<程序员成长路线图>>
- 几种进程间的通信方式
- 栈的经典面试题之用两个栈实现一个队列
- java面试题120题
- 随想-如何成为出色的程序员
- 合格程序员的基本素质
- 面试题49:将字符串转换成整数
- 面试题总结:链表类型