Android CodeReview常见问题汇总

在Activity、Fragment、Dialog和ViewModel等有生命周期的类里不要用GlobalScope协程域,应使用lifecycleScope或viewModelScope

原因:GlobalScope生命周期同APP,页面销毁时对应的协程不会被取消

Integer类型与Enum类型

原因:当返回值有多种情况时,推荐是用enum进行判断。而不是返回int类型数据!如果必要使用int类型,也需要将int封装到一个接口中统一管理

build.gradle远程依赖第三方包时,版本号建议写死,不要使用+号

原因:避免由于新版本的第三方包引入了新的问题

导入第三方工程时,记得把编码转换成自己工程当前是用的编码

原因:乱码

所有类和方法需要编写注释,class注释该类的作用、范围和注意事项等,方法注释除了解释该方法是做什么的,复杂方法还需要将设计思路写在注释里

原因:代码可读性高,便于非业务编写人快速了解业务需求并接手开发新功能。

调用第三方的包或者JDK的方法时,要跳进他们的源码,看要不要加 try-catch

原因:可能会导致自己应用的崩溃

使用第三方包时,是否加上其混淆规则

原因:若漏掉加上第三方包的混淆规则,会导致第三方包不该混淆的代码被混淆。在Debug版本没有发现问题,但是Release版本就会出现问题

保存在内存中的图片,是否做过压缩处理再保存在内存里

原因:图片质量太高,导致OOM

自定义View的onDraw\onLayout、列表遍历等频繁调用的方法里创建对象

原因:onDraw\onLayout会被频繁调用,列表遍历也会多次调用,在其内部创建对象会导致系统频繁申请存储空间并触发GC,导致内存抖动,严重会导致OOM

Intent传递的数据太大

原因:导致页面跳转过慢,太大的数据可以通过持久化的形式传递,改成读写文件

使用kotlin data接收服务端数据源时,所有字段要么都是可null,或者设置默认值,采取不信任服务端策略,终端对数据进行安全与合理性校验

原因:如果一个data类有些字段设置了默认值,有些是可null的,会导致服务端给设置了默认值字段内容返回null时将默认值覆盖,app运行崩溃。

频繁地操作同一个文件或者执行同一个数据库操作,优化

原因:耗时,考虑把它用静态变量或者局部变量的形式缓存在内存里,用空间换时间

页面退出时,清理操作

原因:内存泄漏,

是否调用Handler的removeCallbacksAndMessages(null)来清空Handler里的消息;

是否取消了还没完成的请求;

在页面里注册的监听,是否反注册;

假如自己用到观察者模式,是否反注册;

假如用了RxJava的话,是否解除订阅;

系统的、自己写的,注册和反注册的方法,是否成对出现

原因:内存泄漏

防内存泄漏

内部类,比如Handler、Listener、Callback是否是成static class

原因:非静态内部类会持有外部类的引用。

假如子线程持有了Activity,要用弱引用来持有

原因:Request的Activity就应该用弱引用的形式,防止内存泄漏。

要求传入Activity作为参数的函数,是否可以改用getApplicationContext()来作为参数

而且在函数体内,处理参数前,必须加上判空语句

原因:某变量为空

回调函数是否处理好

回调函数很容易出问题。比如网络请求的回调,需要判断此时的Aciivity等是否还存在,再进行调用。因为异步操作回来,Activity可能就消失不存在了。

而且还要对一些可能被回收的变量进行判空。

启动第三方的Activity时,是否判断了该Intent能否被解析

原因:若Activity不存在,会出现ActivityNotFoundException的异常

新注册的Activity、Service或Provider,若AndroidManifest.xml中exported属性为true,要考虑是否会引发安全性问题

原因:exported属性为true时,外部应用就可以直接调用起该Activity。

可能导致的问题:

1)若外部应用直接启动详情页,从而让某些验证页面直接被绕过

2)若外部应用给该Activity传递乱七八糟的Intent,可能让该应用崩溃。也就是Android中的拒绝服务漏洞

除数是否做了非0判断

原因:计算异常

不要在Activity的onCreate里调用PopupWindow的showAsLoaction方法

原因:Activity还没被加载完,会报错

所有涉及到IO、网络、数据库、Bitmap等耗时操作,一点要在IO协程或单独线程里处理,不论文件大小,所有IO处理必须有finally块,流进行关闭

原因:主线程不允许做任何潜在的耗时操作,避免阻塞主线程,导致ANR

阅读全文
资源下载
下载价格免费
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.dandroid.cn/archives/11697,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?