day 12-13 面试题:apk瘦身、System.exit(),onDestory,Activity.finish()的区别

面试题:

1. 谈谈你对apk瘦身的经验      
2. System.exit(),onDestory,Activity.finish()的区别

1. 谈谈你对apk瘦身的经验

安装包体积对转化率、安装时间、运行内存、ROM空间几个方面影响都比较大。

  1. 业务梳理,开发模式升级

    很多需要使用较大的so库的业务,尝试着使用h5或者小程序等其他方式替代。比如pdf文件加载,可以在使用H5插件转换为网页加载,而不是在客户端引入6M+的so来实现该功能。

  2. ProGuard优化

    避免过度keep,避免keep *的方式出现,keep整个package也需要谨慎处理。四大组件的进一步混淆,我认为暂时没那么大必要,稳定性为首要任务。

  3. 参考FaceBook开源的ReDex工具,对Dex文件进行压缩

    这个操作生产上我们也没用,测试环境倒是有在使用。

  4. 图片大小优化

    高清大图,进行有损压缩(使用tinypng网站)或者提供webp文件。没用alpha通道的png图,换成jpg图片,可以减少体积。

  5. 手动lint检查,手动删除无用资源

    Android Studio上选择“Analyze”选项,然后选择“Inspect Code…”,范围根据需要选择执行,根据建议处理。

  6. 尽量少的使用三方库,避免引入体积比较大的libary。

    rxJava,rxAndroid,zxing,zbar,Luban等,其实很多功能只需要拿核心代码过来就可以。

  7. Gradle中配置shrinkResources打包时移除无用资源。

     buildTypes {
          release {
            //开启代码混淆
            minifyEnabled true
            //Zipalign优化
            zipAlignEnabled true
            //移除无用的resource文件
            shrinkResources true
          }
     }
    

2. System.exit(),onDestory,Activity.finish()的区别

System.exit()是退出进程,Activity.finish()是关闭页面,onDestory是销毁资源,后两个是调用关系。
原先我们项目只有一个Activity,所以会有很多static的资源,在退出app时,必须使用System.exit(),否则再次进入时会有异常发生。

System.exit():
结束整个进程,Activity所占用资源也会被释放。

Activity.finish():
关闭Activtiy,调用这个方法时,Activity栈中已经将该Activity移除,onDestory可能会稍晚执行。

onDestory:
系统销毁Activity所占用的内存空间。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值