1、面试中的问题web
经过这几天的面试,总结了本身在面试过程当中问到的问题,部分问题已经给出了答案,还有部分问题,还未有时间整理出来。面试
ListView出现闪图、图片错乱缘由解决方案编程
函数式编程 (Lambda)数组
Activity四种启动模式安全
消息通信微信
AIDL框架
ImageLoader内部原理函数式编程
RecyclerView ViewHodler绑定函数
Activity与Fragement 生命周期工具
Service如何让它不清理
Fragement替换机制
xutils AsyncHttp volly三种框架的使用
帧布局 FrameLayout
MVC、MVP
一、object类下经常使用的方法
tostring
equals
hashcode
notify
notifyAll
wait
finalize
clone
getClass
一、String、StringBuffer和StringBuilder的区别
String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。
StringBuffer:字符串变量(Synchronized,即线程安全)。
StringBuilder:字符串变量(非线程安全)。在内部,StringBuilder对象被看成是一个包含字符序列的变长数组。
String 类型和StringBuffer的主要性能区别:String是不可变的对象, 所以在每次对String 类型进行改变的时候,都会生成一个新的 String 对象,而后将指针指向新的 String 对象,因此常常改变内容的字符串最好不要用 String。
使用 StringBuffer 类时,每次都会对 StringBuffer 对象自己进行操做,而不是生成新的对象并改变对象引用。因此多数状况下推荐使用 StringBuffer 。
二、 ArrayList,LinkedList,Vector,Stack之间的区别
一,线程安全性
Vector、Stack:线程安全
ArrayList、LinkedList:非线程安全
二,实现方式
LinkedList:双向链表
ArrayList,Vector,Stack:数组
三、hashmap和hashtable的区别
HashMap哈希表是由数组+链表组成.
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口。
主要区别在于HashMap容许空(Null)键值(Key,非线程安全。
hashTable 线程安全。
3、关于屏幕适配
一、选用主流的屏幕来开发测试。
二、不用绝对布局,多使用相对布局以及线性布局, 要使用dp,不适用px。
三、在开发后期,在不一样的屏幕分辨率下测试,若是没出现太大的问题,就能够上线了。
若是后期测出问题:
一、图片适配
反编译微信,发现图片都是放在hdpi文件夹下。1280*720的图片
二、布局适配
layout-800X480得布局文件
三、尺寸适配
经过values -> dimens.xml文件配置尺寸, 可配置values-1280*720里面的dimens.xml文件
四、权重适配
layout_weight、weightSum权重总数
五、代码适配
获取屏幕的宽高,动态计算控件的大小
getWindowManager.getDefaultDisplay().getWidth()
(width*200/320) 设置屏幕占有的宽度
px转dp
如何处理内存溢出,内存泄露(如何处理Android内存泄露)
内存泄露是指程序在运行过程当中动态申请的内存空间再也不使用后没有及时释放,从而极可能致使应用程序内存无线增加。
内存泄露的检测
(1)利用内存泄露检测工具
内存监测工具 DDMS --> Heap
内存分析工具 MAT(Memory Analyzer Tool)
(2)释放资源我都在onDestroy()里面作处理。
(3)对于图片,使用recycle函数来回收资源。
内存泄露处理方法:
第一,应该尽可能避免static成员变量引用资源耗费过多的实例,好比Context。
第2、Context尽可能使用Application Context,由于Application的Context的生命周期比较长,引用它不会出现内存泄露的问题。
第3、使用WeakReference代替强引用。好比可使用WeakReference<Context> mContextRef;
对于Handler的内存泄露处理:
这个代码存在泄漏问题,由于HandlerThread的run方法是一个死循环,它不会本身结束,线程的生命周期超过了activity生命周期,
当横竖屏切换,HandlerThread线程的数量会随着activity重建次数的增长而增长。
应该在onDestroy时将线程中止掉:mThread.getLooper().quit();
onDestroy时清除消息,mHandler.removeCallbacksAndMessages(null); // 参数为null时会清除全部消息。
声明Handler为static并持有Activity的弱引用。
Android常见的几种动画以及区别。
Android NDK 是在SDK前面又加上了“原生”二字,即Native Development Kit,所以又被Google称为“NDK”。