Fragment 整个生命周期演示

本文深入探讨了Android中Fragment的生命周期,通过代码示例展示了从启动到销毁的完整流程,并阐述了各回调方法的作用和使用场景。重点强调了Fragment如何在保持业务逻辑与UI分离的同时实现复用的最大化。
摘要由CSDN通过智能技术生成

Fragment生命周期主要体现在以下表中13个方法里,以下是按照Fragment从开始到销毁的先后执行顺序排序。

 

序号

方法名称

描述

1

public void onInflate(Activity activity, AttributeSet attrs,BundlesavedInstanceState)

Activity.onCreate方法之前调用,可以获取除了View之外的资源

2

public void onAttach(Activity activity)

fragment第一次与Activity产生关联时就会调用,以后不再调用

3

public void onCreate(Bundle savedInstanceState)

onAttach执行完后会立刻调用此方法,通常被用于读取保存的状态值,获取或者初始化一些数据,但是该方法不执行,窗口是不会显示的,因此如果获取的数据需要访问网络,最好新开线程。

4

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState)

作用:创建Fragment中显示的view,其中inflater用来装载布局文件,container表示<fragment>标签的父标签对应的ViewGroup对象,savedInstanceState可以获取Fragment保存的状态

5

public void onViewCreated(View view, Bundle savedInstanceState)

继上面后就会调用此方法

6

public void onActivityCreated(Bundle savedInstanceState)

Activity.onCreate方法调用后会立刻调用此方法,表示窗口已经初始化完毕,此时可以调用控件了

7

public void onStart()

开始执行与控件相关的逻辑代码,如按键点击

8

public void onResume()

这是Fragment从创建到显示的最后一个回调的方法

9

public void onPause()

当发生界面跳转时,临时暂停,暂停时间是500ms,0.5s后直接进入下面的onStop方法

10

public void onStop()

当该方法返回时,Fragment将从屏幕上消失

11

public void onDestroyView()

fragment状态被保存,或者从回退栈弹出,该方法被调用

12

public void onDestroy()

Fragment不再被使用时,如按返回键,就会调用此方法

13

public void onDetach()

Fragment生命周期的最后一个方法,执行完后将不再与Activity关联,将释放所有fragment对象和资源

 

下面进行一个demo来观察fragment生命周期,

1)从启动到显示整个界面:


 

点击跳转到第二个Actvity时的情况——


可以看到,依次调用onPause()  onStop()方法;观察其时间,可以发现就是相差500ms ;

当再次返回到这两个fragment


当点击返回键,直接回到主界面时,可以看到fragment销毁并退出了


 

 至此,Fragment的生命周期一览无余。

代码如下:

public class MyFragment1 extends Fragment
{
	private Button button1;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onCreateView");

		View view = inflater.inflate(R.layout.my_fragment1, null);
		Log.d("Fragment1_onCreateView_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		Log.d("Fragment1_onCreateView_view_edittext1",
				String.valueOf(view.findViewById(R.id.edittext1)));
		button1 = (Button)view.findViewById(R.id.button1);

		button1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getActivity(), MainActivity.class);
				startActivity(intent);
			}
		});
		return view;
	}

	@Override
	public void onInflate(Activity activity, AttributeSet attrs,
			Bundle savedInstanceState)
	{

		Log.d("Fragment1", "onInflate");
		Log.d("Fragment1_onInflate_activity_stringResource", activity
				.getResources().getString(R.string.app_name));
		Log.d("Fragment1_onInflate_class",
				attrs.getAttributeValue(null, "class"));
		Log.d("Fragment1_onInflate_getActivity", String.valueOf(getActivity()));
		Log.d("Fragment1_onInflate_activity_edittext1",
				String.valueOf(activity.findViewById(R.id.edittext1)));
		Log.d("Fragment1_onInflate_savedInstanceState",
				String.valueOf(savedInstanceState));
		super.onInflate(activity, attrs, savedInstanceState);
	}

	@Override
	public void onAttach(Activity activity)
	{
		Log.d("Fragment1", "onAttach");
		Log.d("Fragment1_onAttach_activity_edittext1",
				String.valueOf(activity.findViewById(R.id.edittext1)));
		Log.d("Fragment1_onAttach_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		super.onAttach(activity);
	}

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onCreate");
		Log.d("Fragment1_onCreate_getActivity", String.valueOf(getActivity()));
		super.onCreate(savedInstanceState);
		
	}

	@Override
	public void onViewCreated(View view, Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onViewCreated");
		Log.d("Fragment1_onViewCreated_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		Log.d("Fragment1_onViewCreated_view_edittext1",
				String.valueOf(view.findViewById(R.id.edittext1)));

		super.onViewCreated(view, savedInstanceState);
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onActivityCreated");
		Log.d("Fragment1_onActivityCreated_getActivity_edittext1",
				String.valueOf(getActivity().findViewById(R.id.edittext1)));
		super.onActivityCreated(savedInstanceState);
	}

	@Override
	public void onStart()
	{
		Log.d("Fragment1", "onStart");
		super.onStart();
	}

	@Override
	public void onResume()
	{
		Log.d("Fragment1", "onResume");
		super.onResume();
	}

	@Override
	public void onPause()
	{
		Log.d("Fragment1", System.currentTimeMillis()+"onPause");
		super.onPause();
	}

	@Override
	public void onStop()
	{
		Log.d("Fragment1", System.currentTimeMillis()+"onStop");
		
		super.onStop();
	}

	@Override
	public void onDestroyView()
	{
		Log.d("Fragment1", "onDestroyView");
		super.onDestroyView();
	}

	@Override
	public void onDestroy()
	{
		Log.d("Fragment1", System.currentTimeMillis()+"onDestroy");
		super.onDestroy();
	}

	@Override
	public void onDetach()
	{
		Log.d("Fragment1", "onDetach");
		super.onDetach();
	}

}


演示Demo 下载


使用Fragmen的好处就是可以把业务逻辑和UI封装在一起,与外部关联系不大,其他程序也可以用该组件,从而实现复用最大化。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值