一些Android的面试题及答案(偶尔更新)

  1. 热修复
    (1)原理:在dex文件中,每个element对应的就是dex文件,所以加载class就是从一个个dex文件中找到对应的code。一旦加载成功后,就直接return。所以,如果2个dex含有相同的class,会先返回前面那个。使用一个新的dex,让
    它在element文件表的最前面,这样我们修改的class文件就会被首先加载进来。从而达到替换之前代码的目的。
    (2)方案:把有问题的类打包到一个dex(patch.dex)中去,然后把这个dex插入到Elements的最前面。
    (3)考虑:
    1.补丁只能针对单一客户端版本,随着版本差异变大补丁体积也会增大;
    2.补丁不能支持所有的修改,例如AndroidManifest;
    3.补丁无论对代码还是资源的更新成功率都无法达到100%。

  2. 网络图片加载优化:
    (1)原理:图片的加载在UI界面上属于比较耗时的工作,一般会进行优化,减少内存的开销,提高性能。

    (2)方案:一般使用LruCache,它通过LinkedHashMap保持图片的强引用方式存储图片,当缓存空间超过设置定的限值时会释放掉早期的缓存。
    (3)考虑:
    1.软/硬引用的缓存:速度最快,但是很容易被系统回收。
    2.内存缓存:一般不太容易被回收,速度仅次于软引用缓存,但是会暂用系统内存,一般会初始给予10-50M/2G内存。
    3.硬盘储存:虽然加载速度略慢,但是可以储存大量图片。在请求网络图片之前,一般会优先加载本地图片。

  3. 内存泄露:
    (1)原因:当一个对象已经不需要再使用了,本该被回收时,而有另外一个正在使用的对象持有它的引用从而导致它不能被回收,这导致本该被回收的对象不能被回收而停留在堆内存中,这就产生了内存泄漏。
    1.通过一些开源的库来发现如leakcanary
    2.通过adb shell dumpsys meminfo和ddms来确定泄露源,这种方法更精确,一般用于第一种方法发现具体的可疑Activity泄露,然后再通过这种方法再精确定位问题
    3.Android Studio 自带monitors,可以非常清晰的看到内存使用情况 (2)考虑:1.图片缓存过多,或者加载的图片体积过大,使用图片优化方式解决
    2.使用了大量静态对象但是没有回收。避免使用静态或者人为回收
    3.开启了众多线程。使用线程池管理线程

  4. 数据储存方式:
    (1)SharedPreferences:一种轻量级储存方式,一般用于String,int等简单的数据储存。
    (2)文件储存:硬盘储存。多用于图片的储存。
    (3)SQLite:一种数据库方式,可以实现增删改查。一般联系人、聊天记录等。
    (4)Content Provider:android四大组件之一,使一个应用程序的指定数据集提供给其他应用程序。
    (5)网络储存。

5.如果一个应用要从网络上下载MP3文件,并在Activity上展示进度条,这个Activity要求是可以转屏的。那么在转屏时Actvitiy会重启,如何保证下载的进度条能正确展示进度呢?

参考资料http://www.jianshu.com/p/7a7db9f8692d

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值