内部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);
	}

你可能感兴趣的:(Android开发)