写项目的时候如果需要对碎片的构造方法传入参数(即创建一个有参的构造方法),此时会飘红
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,如果类没有public的empty constructor,该异常就会抛出。
当然以上思路都是来自网上的思路,不过我的想法是,退一万步讲就算不抛出这两个异常,利用反射的时候参数中可以看出传入了Bundle,而并没有参数保存了你创建构造方法传的参数,所以系统会推荐你使用Bundle来传递参数。
附上参考地址
补充
那么现在有个问题,就是既然Fragmnet容易被kill,那么我使用activity总的Intent存这些数据总可以了吧,如下
recruitId = getActivity().getIntent().getIntExtra(AppConstant.INTENT_RECRUIT_ID, 0);
这显然是可以的,但是不要忘记,Fragment的本意就是创建时,建议有自己独立的逻辑,视图,这样才能在使用场景改变时,更方便直接引用(比如我现在要把Fragmnet放到Dialog中),如上的话便与Activity有了耦合性,违背初衷。