Fragmnet为何一定需要空的构造方法

原创 2016年06月02日 10:14:14

写项目的时候如果需要对碎片的构造方法传入参数(即创建一个有参的构造方法),此时会飘红

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead...

大概意思就是避免创建有参的构造方法,推荐使用无参的构造方法,那么这是为什么呢?
在网上查了下,发现是在程序因为系统内存不足而被kill的时候(不是真意义上的结束程序),当重新回到这个页面的时候,系统就会利用反射来重新构建一个新的fragment:

public static Fragment instantiate(Context context, String fname, Bundle args)

而此时会有以下两种情况:

InstantiationException,如果类没有empty constructor,该异常就会抛出。
IllegalAccessException,如果类没有publicempty constructor,该异常就会抛出。

当然以上思路都是来自网上的思路,不过我的想法是,退一万步讲就算不抛出这两个异常,利用反射的时候参数中可以看出传入了Bundle,而并没有参数保存了你创建构造方法传的参数,所以系统会推荐你使用Bundle来传递参数。

附上参考地址

补充

那么现在有个问题,就是既然Fragmnet容易被kill,那么我使用activity总的Intent存这些数据总可以了吧,如下

   recruitId = getActivity().getIntent().getIntExtra(AppConstant.INTENT_RECRUIT_ID, 0);

这显然是可以的,但是不要忘记,Fragment的本意就是创建时,建议有自己独立的逻辑,视图,这样才能在使用场景改变时,更方便直接引用(比如我现在要把Fragmnet放到Dialog中),如上的话便与Activity有了耦合性,违背初衷。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

浅析Fragment为什么需要空的构造方法

今天,有同事在看了我的代码后,告诉我当我们的类继承自Fragment时,需要添加一个空的public构造方法。我很好奇问他为什么,他说官方建议我们这么做,不然可能会出问题,我们的产品已经被友盟统计到因...

用this调用类的构造方法

今天看书看到JAVA中This调用类的构造方法,书上写的不太明确,所以找了点资料补充了一下。 在一个Java类中,其方法可以分为成员方法和构造方法两种。构造方法是一个与类同名的方法, 在Java类...

Java 构造方法

spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。

spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。接口注入不作要求,下面介绍前两种方式。 1,set注入   采用属性的set方法进行初始化,就成为set...

1. ThreadPoolExecutor的一个常用的构造方法

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Bl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)