android重点知识

1、handler 与Looper 与MessageQueue 、Message之间的关系

 handler:是处理主线程(ui线程)处理耗时操作的线程,通过post message到MessageQueue队列中,使用handler需要实现 handlerMessage方法,通过更新主线程ui

Looper:每个Looper对应一个MessageQueue,在handler之前Looper.prepare()会初始化looper和MessageQueue,最后Looper.loop方法会去循环分发message到指定的handler,改api方法中有一句 msg.target.dispatchMessage(msg);   这就是looper和handler之间的调用


2、hander与 AsyncTask的优缺点 

AsyncTask实现的原理和适用的优缺点

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

使用的优点:

简单,快捷

过程可控      

使用的缺点:

在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.


Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)运行并生成Message-Looper获取Message并传递给HandlerHandler逐个获取Looper中的Message,并进行UI变更。

使用的优点:

结构清晰,功能定义明确

对于多个后台任务时,简单,清晰

使用的缺点:

 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)



3、android里面几种常见的存储方式

  a、Content provider

            1) ContentProvider为存储和读取数据提供了统一的接口

            2) 使用ContentProvider,应用程序可以实现数据共享

            3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)

           首先在Androidmanifest.xml中注册provider权限,然后通过getContentResolver() 然后得到contentResolver()对象 可以对该应用进行类似数据库操作一样的增删改成,需要的参数是uri  和参数值,查询一般得到游标Cursor  通过遍历游标获取属性值

  b、SharedPreferences

  实际上SharedPreferences处理的就是一个key-value(键值对)。SharedPreferences常用来存储一些轻量级的数据. 通过getSharedPreferences()得到改SharedPreferences对象  然后得到edit对象用来put值到改对象中,最后需要edit.commit()来将改对象存储到文件中,最后是以文件形式保存在data/data的指定路径下

  c、sqlite存储 

  SQLite是一种轻量级的小型数据库,虽然比较小,但是功能相对比较完善,一些常见的数据库基本功能也具有,在现在的嵌入式系统中使用该数据库的比较多,因为它占用系统资源很少

   需要继承SQLiteOpenHelper 然后helper.getWritableDatabase() 得到SQLiteDatabase 对象,该对象可以对数据进行增删改查操作,提供了key value形式的CURD方法

  d、io流存储

 

  e、webview网络存储

4,listview你是怎么优化的。

用viewHolder和convertview优化内存,减少view的实例化个数,当item1被滑出屏幕时,这时不需要创建新的item1的view实例,android里面提供了Recycler(反复循环器)构件,而且viewHolder是静态类,最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可。

4.1,listview图片加载优化

1. decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,
无需再使用java层的createBitmap,从而节省了java层的空间,并且设置图片的压缩比例,从而缩小内存使用

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);,
2.回收图片缓存

 if(!bmp.isRecycle() ){
bmp.recycle() //回收图片所占的内存
system.gc() //提醒系统及时回收
}



5,view的刷新,之前说过

      View 可以调用invalidate()和postInvalidate()这两个方法刷新

6,IPC及原理


7,Android多线程


8,Android为什么要设计4大组件,他们之间的联系,不设计行不行(主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好【Technicolor的面试官问的这个】)


9,service的周期,activity的周期,谈下你对Android内部应用的了解,比如他做电话,以及联系人等等应用。框架层有很多东西还是多看看,熟悉Android怎么做的,不管你做应用程开发还是应用框架层开发很有好处的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值