android fragment replace 生命周期,Android Fragment的生命周期和优化

一、Fragment的生命周期

1.onAttach->onCreate.....->onDestroy->onDettach

这条生命周期是一个完整的生命周期,onAttach表示从Actitivity附着,onDettach表示从Activity剥离,一般来说,调用add方法后悔有这条流程。

注意:在FragmentActivity中使用事务的方法attach和dettach并不会调用onAttach和onDettach,那会发生什么变化呢,看第三条

2. onSaveInstanceState-->onStop ... onStart->onResume-->....

这条生命周期和Activity的onRestart有着一定的关联。

注意,Activity每次调用onRestart之后,Fragment就会执行这条生命周期,但是要注意的是,这条生命周期并不可靠,有时不会执行。

3.onDestroyView-> .... ->onCreateView ->onViewCreate

生命周期反了么,答案是否定的。调用者条生命周期往往是使用了事务的方法dettach和attach。

注意:在这种流程中,可以更好的管理Fragment的加载,也可以解决叠加问题,生命周期循环问题。

4.重复onAttach->onCreate.....->onDestroy->onDettach

这条生命周期是由于每次都是用的是replace方法

5.持久态

在经历了.onAttach->onCreate->onCreatView-->...->onResume之后,如果没掉用replace,add,attach,dettach,而是使用了简单的hide,show等方法

注意:这种可用于回退栈操作。

二、优化Fragment防止页面多次inflate

Android 3.0开始Fragment多次受到广泛关注,是的页面开发更加方便。

FragmetnManager+FragmentTransaction+Fragment+FragmentActivity是4个永远离不开的组件。因此来说,

开发难度有所提升的同时,效率问题也成为了重点考虑的。

开发时经常遇到的Fragment问题有:管理,事务,添加,移除,通信,回退栈。Fragment的

效率问题发生的原因是FragmentManager设计并不完美造成的。FragmentManager只做了一

半工作,剩下的一半管理工作需要由开发人员来实现。

开发Fragment需要注意一下几点:

如果Fragment页面只出现一次,类似欢迎界面的话 使用 replace+不断新建Fragment方法即可

如果使用Fragment+BackStack,不要使用replace,应该使用add+remove+popBackStack+addToBackStack+hide+show

如果是做Tab页面,确切的说你还需要定义至少一个List fragmentList。

将初始化完毕的所有Fragment加入fragmentlist,然后使用 add+attach+detattch方法进行管理,add负责添加,其他2个方法负责切换,这样效率特别好,防止了Fragment的叠加。

Fragment的内部优化,依据Fragment的生命周期,onCreateView和onDestroyView会被反复调用,因此需定义一个全局的contenrView优化如下

private View contentView = null;

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)

{

if(contentView==null)

{

contentView = inflater.inflate(R.layout.testlayout, container,false

}

if(contentView!=null)

{

return contentView;

}

return super.onCreateView(inflater, container, savedInstanceState);

}

public void onViewCreated(View view, Bundle bundle)

{

if(view!=null)

{

TextView tv = view.findViewById(R.id.showTv);

tv.setTextView("请在这里初始化页面数据");

}

}

@Override

public void onDestroyView()

{

//移除当前视图,防止重复加载相同视图使得程序闪退

((ViewGroup)contentView.getParent()).removeView(contentView);

super.onDestroyView();

}

三、getActivity调用时机

通常我们调用getActivity处理一些比较重要的事情,但是警察遇到空指针问题,那么在什么时候调用比较合适呢

一、onAttach之后

二、onDestroy之前

Try doing it!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值