笔者因为在找工做,因此近期最主要的任务就是准备面试,不打无准备之仗。只有你准备充分了,那么你想要的机会才有机会入你怀中。html
笔者会将准备面试的学习过程记录下来,方便本身复盘的同时也但愿能给一道找工做的小伙伴们一些帮助。笔者准备的内容大纲以下android
接下来开始本篇博客的正菜网络
(1)经过AsyncTask能够更加方便的执行后台任务以及在主线程中访问ui,可是并不合适执行特别耗时的后台任务。并发
这个主要是由于在Android 3.0以后它的内部是串行执行任务的。串行执行任务效率就会比较低,虽然能够经过调用AsyncTask的executeOnExecutor方法并行执行任务,可是在并发程度比较高的状况下,很容易带来并发错误,这也是Android 3.0以后将并行改为串行的主要缘由。框架
(2)注意AsyncTask的内存泄露、生命周期问题异步
若是AsyncTask被声明为Activity的非静态的内部类,那么AsyncTask会保留一个对Activity的引用。若是Activity已经被销毁,AsyncTask的后台线程还在执行,它将续在内存里保留这个引用,致使Activity没法被内存回收,引发内存泄漏。函数
解决方法:oop
(1)将AsyncTask改成静态内部类,也能够在内部类AsyncTask里面持有Activity的弱引用。布局
(2)在Activity的onDestroy生命周期方法里调用AsyncTask的cancel销毁AsyncTask
在Activity中建立的AsyncTask会一直执行,直到doInBackground()方法执行完毕,因此咱们在销毁Activity的时候也须要销毁AsyncTask。经过在Activity的onDestroy生命周期方法里调用AsyncTask的cancel销毁AsyncTask
建议配合Android开发艺术探索(P392) 同时食用
Android的消息机制主要指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工做过程,这三者其实是一个总体。Handler的主要做用是将一个任务切换到某个指定的线程中去执行。
那Handler是怎么工做的呢?
Handler主要包含消息的发送和接收。某线程借助Handler发送一条消息,就会插入到MessageQueue这个消息队列中,Looper不断的轮询这个消息队列,若是轮询到新的消息到来就会去取出并处理它,再交由Handler的dispatchMessage方法处理消息,dispatchMessage方法是在Handler所在的线程,因此于此同时,线程也就切换到了Handler所在的线程了。
MessageQueue的内部实现是一个队列吗?
不是,它用一个单链表来维护消息列表,由于MessageQueue须要不断的插入和删除数据,而单链表实现插入和删除的效率高。
建议配合该博客同时食用 聊聊Android的消息机制
HandlerThread就是可使用Handler的Thread,它是一个串行队列,有本身的内部Looper对象,背后只有一个线程。
它们都是用于对象序列化的接口,有的时候咱们须要把对象持久化到存储设备或者经过网络进行传输给其余客户端,这个时候就须要完成对象的持久化。经过这两个接口咱们能够序列化来完成对象的持久化。
Serializable是序列化的意思,表示将一个对象转换成存储或可传输的状态。序列化后的对象能够在网络上进传输,也能够存储到本地。
使用Parcelable也能够实现对象序列化果,不过不一样于Serializable,Parcelable方式的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是Intent所支持的数据类型,这也就实现传递对象的功能。
总结
Serializable须要大量的I/O操做,虽然使用时操做方便可是开销很大。Parcelable使用起来稍微麻烦点,但它的效率高,它是Android推荐的序列化方式,首选Parcelable。
建议配合Android开发艺术探索(P47) 同时食用
有DOM、SAX、PULL三种解析方式
建议配合该博客同时食用 Android中解析XML格式数据的方法