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有了耦合性,违背初衷。

Java构造函数 为什么需要无参构造函数

Java构造函数 为什么需要无参构造函数  分享| 2013-05-08 16:20匿名 | 浏览 3298 次  java编程语言函数 class cust { int a...
  • evilcry2012
  • evilcry2012
  • 2015年12月24日 11:04
  • 3777

JAVA单例模式:就是把构造方法弄成私有的

一.问题引入   偶然想想到的如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过static来访问呢;如果构造方法是private的话,那么有什么好处呢;如果构造方法是pri...
  • LoveStudy_girl
  • LoveStudy_girl
  • 2016年06月22日 17:15
  • 4077

类的构造函数 拷贝构造函数 赋值操作符 析构函数

类的那些函数~~~
  • C12345SDN
  • C12345SDN
  • 2014年03月16日 09:24
  • 1742

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

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

函数的构造方法

  • 2017年11月08日 23:23
  • 344KB
  • 下载

一种图像稀疏贪婪索引字典的构造方法

  • 2014年04月26日 10:46
  • 623KB
  • 下载

点云表面曲线的手绘构造方法

  • 2012年03月02日 10:14
  • 1.91MB
  • 下载

Java 构造方法

  • 2017年04月23日 20:53
  • 5KB
  • 下载

包含圆类的程序(含几种构造方法)java语言实现

  • 2011年03月11日 16:25
  • 2KB
  • 下载

java 构造方法的资源

  • 2010年06月21日 09:06
  • 59KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Fragmnet为何一定需要空的构造方法
举报原因:
原因补充:

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