Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-10-10:请谈谈Fragment的生命周期? #161

Open
Moosphan opened this issue Oct 10, 2019 · 6 comments
Open

2019-10-10:请谈谈Fragment的生命周期? #161

Moosphan opened this issue Oct 10, 2019 · 6 comments
Labels

Comments

@Moosphan
Copy link
Owner

No description provided.

@zhaoerlei1989
Copy link

zhaoerlei1989 commented Oct 10, 2019

1.fragment跟activity生命周期
2.fragment在viewpager中的生命周期
3.fragment之间传递数据方法有哪几种
4.fragment传递数据中哪种你认为是最好的为什么
5.一个项目中只有一个activity是否可取为啥呢
6.fragment好与坏,

@LvKang-insist
Copy link

1,onAttach:fragment 和 activity 关联时调用,且调用一次。在回调中可以将参数 content 转换为 Activity保存下来,避免后期频繁获取 activity。

​ 2,onCreate:和 activity 的 onCreate 类似

​ 3,onCreateView:准备绘制 fragment 界面时调用,返回值为根视图,注意使用 inflater 构建 View时 一定要将 attachToRoot 指明为 false。

​ 4,onActivityCreated:activity 的onCreated 执行完时调用

​ 5,onStart:可见时调用,前提是 activity 已经 started

​ 6,onResume:交互式调用,前提是 activity 已经 resumed

​ 7,onPause:不可交互时调用

​ 8,onStop:不可见时调用

​ 9,onDestroyView:移除 fragment 相关视图时调用

​ 10,onDestroy:清除 fragmetn 状态是调用

​ 11,onDetach:和 activity 解除关联时调用

​ 从生命周期可以看出,他们是两两对应的,如 onAttach 和 onDetach ,

onCreate 和 onDestory ,onCreateView 和 onDestroyView等

ragment 在 ViewPager中的生命周期

​ ViewPager 有一个预加载机制,他会默认加载旁边的页面,也就是说在显示第一个页面的时候 旁边的页面已经加载完成了。这个可以设置,但不能为0,但是有些需求则不需要这个效果,这时候就可以使用懒加载了:懒加载的实现

​ 1,当 ViewPager 可以左右滑动时,他左右两边的 fragment 已经加载完成,这就是预加载机制

​ 2,当 fragment 不处于 ViewPager 左右两边时,就会执行 onPause,onStop,OnDestroyView 方法。

fragment 之间传递数据方法

​ 1,使用 bundle,有些数据需要被序列化

​ 2,接口回调

​ 3,在创建的时候通过构造直接传入

​ 4,使用 EventBus 等

单 Activity 多 fragment 的优点,fragment 的优缺点

​ fragment 比 activity 占用更少的资源,特别在中低端手机,fragment 的响应速度非常快,如丝般的顺滑,更容易控制每个场景的生命周期和状态

​ 优缺点:非常流畅,节省资源,灵活性高,fragment 必须赖于acctivity,而且 fragment 的生命周期直接受所在的 activity 影响。

@gabyallen
Copy link

onAttach() ,片段和活动之间调用,调用一次,保存数据;
oncreate(), 和轰动一样创建活动
onActivityCreated(),活动oncreate执行完时调用
onpause(), 不可交互时调用
onstop(), 不可交互时调用
onDestory(), 清除fragment状态调用
onDetach(),和活动解除关联时调用。
1,当ViewPager可以左右滑动时,他左右两边的片段已经加载完成,这就是预加载机制;
2,当片段不位于ViewPager左右两边时,就会执行on Pause,onStop,OnDestroyView方法。

片段之间传递数据方法
片段之间传递数据方法
1,使用包,有些数据需要被序列化

2,接口

3,在创造的时候通过构造直接替代

4,使用EventBus等

单活动多fragment的优点,fragment的优缺点
片段比活动占用占用的资源,特别是中低端手机,fragment的响应速度非常快,如丝般的顺滑,更容易控制每个场景的生命周期和状态

优缺点:非常流畅,节省资源,规模高,碎片必须赖于活动性,而且碎片的生命周期直接受其所在的活动影响。

@shiweibsw
Copy link

按照正常的执行顺序如下:
onAttach
onCreate
onCreateView
onViewCreated
onActivityCreated
onStart
onResume
onPause
onStop
onDestroyView
onDestroy
onDetach

@aositeluoke
Copy link

  • A表示的是Activity,F表示的是Fragment

Activity中的生命周期

把Fragment添加到id为content的布局上

var transaction = supportFragmentManager.beginTransaction()
        transaction.replace(R.id.content, RecyclerViewFragment.getInstance())
        transaction.commit()

启动时
A->onCreate
F->onAttach->onCreate->onCreateView->onActivityCreate->onStart
A->onStart->onResume
F-onResume
点击返回键
A->onPause
F->onPause
A->onStop
F->onStop
A->onDestroy
F->onDestroyView->onDestory->onDetach

Fragment在ViewPager中的生命周期

A->onCreate->onStart->onResume
F0->onAttach->onCreate
F1->onAttach->onCreate
F0->onCreateView->onActivityCreate->onStart->onResume
F1->onCreateView->onActivityCreate->onStart->onResume

@mlinqirong
Copy link

onAttach Activity关联Fragment时调用
onCreate 创建fragment时调用
onCreateView 绘制fragment时调用
onActivityCreated Activity创建完成调用
onStart fragment可见
onResume fragment可触摸
onPause fragment不可触摸
onStop fragment不可见
onDestroyView 移除 fragment 相关视图时调用
onDestroy 关闭fragmetn
onDetach 解除Activity关联

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants