美文网首页Android FragmentAndroid知识
为什么使用Fragment Arguments,而非构造函数

为什么使用Fragment Arguments,而非构造函数

作者: CPPAlien | 来源:发表于2016-02-19 14:33 被阅读753次

    下面先分别对构造行数方法(方法一)和argument静态工厂方法(方法二)举个样例代码。
    方法一:

    String content;
    public SecondFragment(String content) {
        this.content = content;
    }
    

    方法二:

    public static SecondFragment newInstance(String content) {
        Bundle args = new Bundle();
        args.putString("content", content);
        SecondFragment fragment = new SecondFragment();
        fragment.setArguments(args);
        return fragment;
    }
    

    往往我们在做Activity向Fragment传递参数时会用方法二,而不会用方法一。这里有以下几个原因,最主要的原因是当系统重建fragment时,所有在类中声明的变量都会丢失。所以如果你使用方法一,当遇到用户改变系统配置或你的app后台后被系统回收而导致fragment重建,则content内容丢失。而在使用argument方法时,则内容不会丢失,在fragment重建后,通过getArguments可以找回。

    当然也有童鞋说我可以使用onSaveInstanceState的方法来在fragment被重建前先保存内容,然后在onCreate(Bundle)时重新赋值。这个方法也是可行的。但这种方法既不容易控制而且也增加了复杂性,比如以后你想多增加一个参数,还需要记得在onSaveInstanceState方法中添加一条。

    咱们之所以使用第二种方法,还有另外一些原因,一方面它维持了fragment的封装性,因为静态方法不包含指向外围类的引用。另一方面根据《Effective Java》第二版中第一条所说:考虑用静态方法代替构造器有诸多好处。

    1. 它们有名称
    2. 不必在每次调用时创建一个新对象
    3. 可以返回原类型的任何子类型的对象
    4. 在创建参数化类型实例的时候,它们使得代码变得更加简洁

    更多具体内容请参考《Effective java》

    注:没有任何方法阻止内存不足时被系统回收

    相关文章

      网友评论

      本文标题:为什么使用Fragment Arguments,而非构造函数

      本文链接:https://www.haomeiwen.com/subject/klcvkttx.html