记录android面试中碰到的问题。
1.activity的启动模式和应用场景
- standard
- singleTop
- singleTask
- singleInstance 和单例模式有什么关系。
2.android 加载图片内存是怎么计算的。
占用的内存=(图片长度 )x(图片宽度)x(单位像素占用的字节数)(图片长度和宽度都是像素为单位)
创建一个BitMap时,其单位像素占用的字节数由其参数BitmapFactory.Options的inPreferredConfig变量决定。
inPreferredConfig为Bitmap.Config类型,Bitmap.Config类是个枚举类型,它可以为以下值:
- ALPHA_8: 此时图片只有alpha值,没有RGB值,一个像素占用一个字节
- ARGB_4444: 一个像素占用2个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占4个bites,共16bites,即2个字节。
这种格式的图片,看起来质量太差,已经不推荐使用。 - ARGB_8888:一个像素占用4个字节,alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占8个bites,共32bites,即4个字节。
这是一种高质量的图片格式,电脑上普通采用的格式。它也是Android手机上一个BitMap的默认格式。 - RGB_565:一个像素占用2个字节,没有alpha(A)值,即不支持透明和半透明,Red(R)值占5个bites ,Green(G)值占6个bites ,Blue(B)值占5个bites,共16bites,即2个字节.对于没有透明和半透明颜色的图片来说,该格式的图片能够达到比较的呈现效果,相对于ARGB_8888来说也能减少一半的内存开销。因此它是一个不错的选择。另外我们通过android.content.res.Resources来取得一个张图片时,它也是以该格式来构建BitMap的.
从Android4.0开始,该选项无效。即使设置为该值,系统任然会采用 ARGB_8888来构造图片
另外,android在加载图片到内存中时,还会根据手机的dpi来对图片进行缩放。如果图片放在drawable文件夹里面,就以160dpi为基准,1dp=1px加载到内存中。如果手机dpi为320,图片就会进行缩放,此时1dp = 2px。也就是像素宽度和长度放大到原来的两倍。对应的内存占用也会增大许多。
3.android项目分包
讲这个的比较少。多数是解决65k问题的分包方案。
合理地分包,可以使整个项目模块化,减少包与包之间的依赖,让整个项目的框架更加清晰,更利于后续功能的拓展。
先按模块分包,再按功能分包。
4.怎么加速启动Activity。
对http协议的理解
java并发i++的线程安全问题
i++实际执行过程有三步。
int i = 1;
int temp = i+1;
i = temp;
单线程倒没什么,多线程的话,切线程处于不同的CPU中,每个线程都拥有自己的
高速缓存,这样可能会出现缓存不一致的问题,比如内存中的i = 0,然后在两个线程中都执行
i = i + 1;分别在两个线程中执行,最后的结果可能是1,而不是2。
网友评论