1. 序列化
为什么序列化?什么情况需要序列化?
序列化将对象转成字节流,便于在网络上传输或者存储在本地文件中,保留对象完整性。
进程间、线程间需要序列化么?
进程间需要序列化,因为不同进程的对象虚内存地址不同,所以不能直接使用。线程间不需要序列化
Activity的启动为什么要序列化?
因为activity的启动过程跨进程,内部也是用了Binder机制。
serializable和parcelable的区别
serializable存储在磁盘上,parcelable 存储在内存,parcelable更快
serializable (使用了反射会产生大量临时变量引发频繁GC),parcelable在内存中建立一块共享数据块,不会有这些问题。
2. hashmap的原理
https://www.jianshu.com/p/f6c9bbd2546e
这个会牵扯到ArrayMap,可能会问他俩的区别或者ArrayMap源码.
3. bitmap
位图,一种存储像素的数据结构,内存空间计算:bitmap的宽高每个像素所占的字节,每个像素占用的字节可Bitmap.config配置。
config | 字节/像素
ARGB_4444| 44=16位/8=2bytes
ARGB_8888 | 84=32/8=4bytes
ALPHA_8 | 1bytes
RGB_565 | 2bytes
加载Bitmap的方式
①将BitmapFactory.Options的inJustDecodeBounds参数设为true并加载图片。
②从BitmapFactory.Options中取出图片的原始宽高信息,它们对应于outWidth和outHeight参数。
③根据采样率的规则并结合目标View的所需大小计算出采样率inSampleSize。
④将BitmapFactory.Options的inJustDecodeBounds参数设为false,然后重新加载图片
网友评论