内部Fragment设置为public static和checkReleaseBuilds false与abortOnError false

在维护一个老项目的时候,发现以前的Activity里边有一个内部Fragment继承自DIalogFragment,但是这个内部Fragment没有public和static修饰,Android Studio 智能地发现了这个问题并给出了错误。虽然给出了错误提示,但是AndroidStudio竟然能正常的打包,查看build.gradle发现了这句话
android {
lintOptions{
checkReleaseBuilds false
abortOnError false
}
}checkReleaseBuilds就是在打包Release版本的时候进行检测,这里就直接关掉了,这样即使有报错也不会停止打包了。这个也太简单粗暴了。
还是按照规范设置内部fragment为public static 的吧。
这样的话在fragment里边要访问所属activity的对象就通过getActivity然后强制类型转换访问,不能直接访问了(static 访问非static错误)。
注意两点:
1、建议每个fragment都设置一个空的构造器,方便恢复状态,有参数的构造器在恢复状态的时候并不会调用。要给fragment传递参数,使用setArguments(Bundle)
2、非static内部类潜在会有内存泄露问题,因为其持有外部类的引用。static内部类不会持有外部类引用。


按照Lint的建议将内部类改成static静态内部类后,由于不可能将当前类的所有全局对象都声明为static对象,所以会报“Cannot make a static reference to the non-static field”的错误,这时候可以使用软引用来解决这个问题,具体代码如下:

public static class LoadDataHandler extends Handler{
    private SoftReference<MainActivity> activitySRF = null;
    public LoadDataHandler(MainActivity activity){
        activitySRF = new SoftReference<MainActivity>(activity);
    }

--------------------- 
作者:王世晖 
来源:CSDN 
原文:https://blog.csdn.net/wangshihui512/article/details/51198268 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值