自定义lint规则解决开发中的问题

本文讲述了作者在遇到因序列化错误导致的崩溃问题后,选择通过编写自定义Lint规则来实时检查和预防此类问题。文章详细介绍了问题背景、原因、解决思路,以及自定义Lint规则的创建、集成和调试方法,旨在减少类似错误并提高代码质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景
在发贝壳2.1.1版本第一次灰度时遇到了一个崩溃(崩溃在租房),第二次灰度版本时发生了相同原因的崩溃(崩在了二手)。 当时的做法是发现一处解决一处, 但没发现的隐藏问题是个定时炸弹。

日志:
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.homelink.customer.host.manage.model.response.HostCommentBean) at android.os.Parcel.writeSerializable(Parcel.java:1823) at android.os.Parcel.writeValue(Parcel.java:1771) at android.os.Parcel.writeArrayMapInternal(Parcel.java:838)

二、问题原因
这个crash的原因是当前类实现了Serializable接口,但成员数据类型未实现Serializable接口, 导致Activity/Fragment在用Intent传值时出现序列化错误,最终崩在了1823行。

 try {
1817            ObjectOutputStream oos = new ObjectOutputStream(baos);
1818            oos.writeObject(s);
1819            oos.close();
1820
1821            writeByteArray(baos.toByteArray());
1822        } catch (IOException ioe) {
1823            throw new RuntimeException("Parcelable encountered " +
1824                "IOException writing serializable object (name = " + name +
1825                ")", ioe);
1826        }

###三、解决思路
现有项目代码存在序列化崩溃的潜在风险,如何使用技术手段找出来呢? 以后如何不再犯相同错误? 现有的Lint、FindBugs、CheckStyle是备选方案, 最终因为Lint可以实时检查并智能提醒而选择使用Lint实现,即用工具实时提醒开发人员潜在风险。

期望效果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值