android面试专题(2)

131 阅读2分钟

android面试专题(3)

  1. Handler的运行机制(运行原理)(Handler,Looper,MessageQueue,Message之间的关系)
    (1)Handler允许处理Message和Runnable对象。
    (2)MessageQueue存储着message和Runnable的队列
    (3)Looper控制着handler传递Message(post, sendMessage)和出离Message(handleMessage方法)
  2. ListView的分页实现思路?
    通过onScrollListenr监视listView是否滑动底部,也就是第一个可见item+可见item的数量 == 总的item, 即加载新的数据。
  3. Intent的功能, 传递的数据的类型
    Intent 连接Acitivity, Service, BroadcastReceiver, ContentProvider的功能。
    传递的数据类型: 8中基本数据类型, 以及String, Bundle ,以及实现Serializable或者Paarcelable的类型。
    Intent分为显示意图,隐式意图:
    显示意图: 调用Intent.setComponent()或intent.setClass()指定组件名, 指定Intent传递个那个组件。
  4. XML解析:
    DOM, SAX, PULL;
    DOM: 将整个文档读入, 构建一个驻留内存的树结构,然后可以使用, 优点:增删改查方便, 缺点: 占据内存大,
    SAX: 基于事件驱动型,占用内存小, 解析速度快, 适合文档的读取, 不适合增删改。
    PULL: 基于事件驱动型, android官方API提供, 可随时终止。
  5. 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成员变量引用资源耗费过多的实例。
  6. 加载大图片的时候如何防止内存溢出
    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()  //提醒系统及时回收
   }