Android之fragment生命周期
来源:互联网 发布:北京海洋馆客流量数据 编辑:程序博客网 时间:2024/06/05 18:33
在android的快速发展中,fragment(碎片化)已经成为主流,它不仅可以是viewpager的好搭档,也是性能提高的一种方式(减少activity的建立)。但是在实际运用中,总是因为它的生命周期导致程序不能达到预想的效果,在这里小编写了个测试程序,简要的说明fragment的生命周期。
主Activity的代码如下:
@Overrideprotected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewByID(); initView();}@Overrideprotected void onResumeFragments() { Log.d(TAG, "omResumeFragments"); super.onResumeFragments();}@Overrideprotected void onStart() { Log.d(TAG, "onStart"); super.onStart();}@Overridepublic void startActivityForResult(Intent intent, int requestCode) { Log.d(TAG, "startActivityForResult"); super.startActivityForResult(intent, requestCode);}@Overridepublic void onAttachFragment(android.support.v4.app.Fragment fragment) { Log.d(TAG, "onAttachFragment"); super.onAttachFragment(fragment);}@Overridepublic void startActivity(Intent intent) { Log.d(TAG, "startActivity"); super.startActivity(intent);}@Overridepublic void startActivityFromFragment(Fragment fragment, Intent intent, int requestCode) { Log.d(TAG, "startActivityFromFragment"); super.startActivityFromFragment(fragment, intent, requestCode);}// 初始化视图private void initView() { fragments = new Fragment[2]; fragments[0] = new Fragment1(); fragments[1] = new Fragment2(); fManager = getFragmentManager(); FragmentTransaction transition = fManager.beginTransaction(); transition.add(R.id.fram, fragments[0], "fragment1").hide(fragments[0]); transition.addToBackStack("fragment1"); transition.add(R.id.fram, fragments[1], "fragment2").hide(fragments[1]); transition.addToBackStack("fragment2"); transition.show(fragments[0]); Log.d(TAG,"5454654645654656"); transition.commit(); bt.setOnClickListener(new MyClickChange());}//idprivate void findViewByID() { bt = (Button) findViewById(R.id.bt1); frameLayout = (FrameLayout) findViewById(R.id.fram);}@Overrideprotected void onStop() { Log.d(TAG, "onStop"); super.onStop();}@Overrideprotected void onPostResume() { Log.d(TAG, "onPostResume"); super.onPostResume();}@Overrideprotected void onDestroy() { Log.d(TAG, "onDestroy"); super.onDestroy();}@Overrideprotected void onPause() { Log.d(TAG, "onPause"); super.onPause();}@Overrideprotected void onResume() { Log.d(TAG, "onResume"); super.onResume();}@Overrideprotected void onSaveInstanceState(Bundle outState) { Log.d(TAG, "onSaveInstanceState"); super.onSaveInstanceState(outState);}@Overridepublic void startActivityFromFragment(android.support.v4.app.Fragment fragment, Intent intent, int requestCode) { Log.d(TAG, "startActivityFromFargment"); super.startActivityFromFragment(fragment, intent, requestCode);}@Overrideprotected void onRestart() { Log.d(TAG, "onRestart"); super.onRestart();}private class MyClickChange implements View.OnClickListener { @Override public void onClick(View v) { switch (mflagfragment) { case 0: fManager.beginTransaction().hide(fragments[mflagfragment]).show(fragments[++mflagfragment]).commit(); break; case 1: fManager.beginTransaction().hide(fragments[mflagfragment]).show(fragments[0]).commit(); mflagfragment = 0; break; } }}
fragment1的代码如下:
@Override public void onHiddenChanged(boolean hidden) { Log.d(TAG,"onHiddenChanged"); super.onHiddenChanged(hidden); } /* * 跳转activity * 传入参数为intent*/ @Override public void startActivity(Intent intent) { Log.d(TAG,"startActivity"); super.startActivity(intent); } /*带返回数据返回activity *传入数据后调用startActivityfromFragment *但看源码中startActivityFromFragment并没有对options做任何处理,执行的还是startActivity方法. * */ @Override public void startActivity(Intent intent, Bundle options) { Log.d(TAG,"startActivity"); super.startActivity(intent, options); } /* * 启动的是startActivityForResult * 都是继承的mhost(callback)*/ @Override public void startActivityForResult(Intent intent, int requestCode) { Log.d(TAG,"startActivityForResult"); super.startActivityForResult(intent, requestCode); } @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG,"onCreate"); super.onCreate(savedInstanceState); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.d(TAG,"onCreateView"); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { Log.d(TAG,"onViewCreated"); super.onViewCreated(view, savedInstanceState); }/** 获取视图*/ @Nullable @Override public View getView() { return super.getView(); } @Override public void onActivityCreated(Bundle savedInstanceState) { Log.d(TAG,"onActivityCreated"); super.onActivityCreated(savedInstanceState); } @Override public void onViewStateRestored(Bundle savedInstanceState) { super.onViewStateRestored(savedInstanceState); } @Override public void onStart() { Log.d(TAG,"onStart"); super.onStart(); } @Override public void onResume() { Log.d(TAG,"onResume"); super.onResume(); } @Override public void onSaveInstanceState(Bundle outState) { Log.d(TAG,"onSaveInstanceState"); super.onSaveInstanceState(outState); } /*配置改变时调用*/ @Override public void onConfigurationChanged(Configuration newConfig) { Log.d(TAG,"onConfigurationChanged"); super.onConfigurationChanged(newConfig); } @Override public void onPause() { Log.d(TAG,"onPause"); super.onPause(); } @Override public void onStop() { Log.d(TAG,"onStop"); super.onStop(); } @Override public void onLowMemory() { Log.d(TAG,"onLoWMemory"); super.onLowMemory(); } @Override public void onTrimMemory(int level) { Log.d(TAG,"onTrimMemory"); super.onTrimMemory(level); } @Override public void onDestroyView() { Log.d(TAG,"onDestroyView"); super.onDestroyView(); } @Override public void onDestroy() { Log.d(TAG,"onDestroy"); super.onDestroy(); } @Override public void onDetach() { Log.d(TAG,"onDetach"); super.onDetach(); }/*以下都是跟transition相关的方法*/ @Override public boolean getAllowReturnTransitionOverlap() { return super.getAllowReturnTransitionOverlap(); } @Override public void setAllowReturnTransitionOverlap(boolean allow) { super.setAllowReturnTransitionOverlap(allow); } @Override public boolean getAllowEnterTransitionOverlap() { return super.getAllowEnterTransitionOverlap(); } @Override public void setAllowEnterTransitionOverlap(boolean allow) { super.setAllowEnterTransitionOverlap(allow); } @Override public Transition getSharedElementReturnTransition() { return super.getSharedElementReturnTransition(); } @Override public void setSharedElementReturnTransition(Transition transition) { super.setSharedElementReturnTransition(transition); } @Override public Transition getSharedElementEnterTransition() { return super.getSharedElementEnterTransition(); } @Override public void setSharedElementEnterTransition(Transition transition) { super.setSharedElementEnterTransition(transition); } @Override public Transition getReenterTransition() { return super.getReenterTransition(); } @Override public void setReenterTransition(Transition transition) { super.setReenterTransition(transition); } @Override public Transition getExitTransition() { return super.getExitTransition(); } @Override public void setExitTransition(Transition transition) { super.setExitTransition(transition); } @Override public Transition getReturnTransition() { return super.getReturnTransition(); } @Override public void setReturnTransition(Transition transition) { super.setReturnTransition(transition); } @Override public Transition getEnterTransition() { return super.getEnterTransition(); } @Override public void setEnterTransition(Transition transition) { super.setEnterTransition(transition); }}
fragment2与fragmetn1相识的代码,这里就不贴出了
运行结果log信息打印:
跳转到后台
重新返回程序
这是完整的生命周期图
在这里小编用的onhide的方式改变fragment,实现切换。如果用replace的话会重启调用,耗用性能,onhide相当于叠加而已,放置下一层!
从上logcat图中可以分析出:
fragment的启动生命周期如下:
onHiddenchanged->onCreate->onCreateView->onActivityCreated->onCstart->onResume
唤醒切换
onPause->onSaveInstanceState->onStop->onStart->onResume
加入activity的生命周期
退出时:(F代替frament A代替Activity)
F onpause -> A onPause ->A onSaveInstanState ->F onSaveInstanState ->F onStop ->A onStop
唤醒
A onRestart -> A onStart -> F onStart -> A onResume -> F onResume ->A onPostResume ->A onResumeFragments
以上是隐藏和唤醒fragment在activity的生命周期。猿友可以试试!
如有不清晰的地方欢迎留言!欢迎各位对小编的指导!
- android之Fragment生命周期
- Android之fragment生命周期
- 【Android开发】之Fragment生命周期
- Android之fragment生命周期解析
- Android 学习之Fragment生命周期
- 【Android基础】Fragment 详解之Fragment生命周期
- Android之Activity,Fragment生命周期探知
- Android中的Fragment使用详解之生命周期
- Android开发之Fragment的生命周期
- Android Fragment---处理Fragment生命周期
- Android Fragment---处理Fragment生命周期
- fragment之生命周期
- fragment生命周期之Onstart();
- Android Fragment 生命周期笔记
- Android fragment生命周期处理
- 41 Android fragment 生命周期
- Android-Fragment的生命周期
- Android Fragment 生命周期详解
- 根据输入时间日期返回时间、昨天、本周几、具体日期 类似于微信朋友圈时间 (oracle)
- 为知笔记和微信高保真原型
- BZOJ1001 [Beijing2006] 狼抓兔子
- C语言中进行 JSON 的创建和解析
- 如何统计一个新玩家在60天内的登录情况----std::bitset
- Android之fragment生命周期
- 2016年做好跨境电商,出口物流更重要
- 安全测试工具IBM Rational AppScan的使用教程
- 设计模式-外观
- springmvc学习-环境搭建(mac)
- android中adapter.clear()引起的错误
- 如何快速制作EDIUS中的黑场过渡
- UIBezierPath精讲
- 尽情享受美妙音乐----英国PURE公司Jongo S3无线音箱一周使用体验