鸟语天空
碎片的生命周期
post by:追风剑情 2015-10-22 23:00

和活动一样,Android中的碎片也有自己的生命周期。

当碎片被创建时,会经历以下状态:

onAttach()

onCreate()

onCreateView()

onActivityCreated()

当碎片变得可见时,会经历以下状态:

onStart()

onResume()

当碎片进入后台模式时,会经历以下状态:

onPause()

onStop()

当碎片被销毁(它当前所在的活动被销毁)时,会经历以下状态:

onPause()

onStop()

onDestroyView()

onDestroy()

onDetach()

与活动一样,可以使用Bundle对象在以下状态中还原碎片的实例:

onCreate()

onCreateView()

onActivityCreated()

注意: 可以在onSaveInstanceState()方法中保存碎片的状态。

碎片经历的状态大多数与活动类似。但是,有一些新状态是碎片独有的:

onAttached()——当碎片与活动建立关联时调用。

onCreateView()——用于创建碎片的视图。

onActivityCreated——当活动的onCreate()方法被返回时调用。

onDestroyView()——当碎片的视图被移除时调用。

onDetach()——当碎片与活动的关联被移除时调用。

注意,活动与碎片之间存在一个主要的区别:当活动进入后台时,会被放到back stack中。这样当用户按Back按钮时,活动可以恢复。但是,碎片在进入后台时不会被自动放到back stack中。要实现这一目的,需要在碎片处理期间显式调用addToBackStack()方法。如:

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();

这段代码确保了当把碎片添加到活动中后,用户可以单击Back按钮移除它。


示例代码:

package com.example.androidtest;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment{
	@Override
	public View onCreateView(LayoutInflater inflater,
						ViewGroup container,
						Bundle savedInstanceState)
	{
		Log.d("Fragment1", "onCreateView");
		return inflater.inflate(R.layout.fragment1, container, false);
	}
	
	@Override
	public void onAttach(Activity activity)
	{
		super.onAttach(activity);
		Log.d("Fragment1", "onAttach");
	}
	
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		Log.d("Fragment1", "onCreate");
	}
	
	@Override
	public void onActivityCreated(Bundle savedInstanceState)
	{
		super.onActivityCreated(savedInstanceState);
		Log.d("Fragment1", "onActivityCreated");
	}
	
	@Override
	public void onStart()
	{
		super.onStart();
		Log.d("Fragment1", "onStart");
	}
	
	@Override
	public void onResume()
	{
		super.onResume();
		Log.d("Fragment1", "onResume");
	}
	
	@Override
	public void onPause()
	{
		super.onPause();
		Log.d("Fragment1", "onPause");
	}
	
	@Override
	public void onStop()
	{
		super.onStop();
		Log.d("Fragment1", "onStop");
	}
	
	@Override
	public void onDestroyView()
	{
		super.onDestroyView();
		Log.d("Fragment1", "onDestroyView");
	}
	
	@Override
	public void onDetach()
	{
		super.onDetach();
		Log.d("Fragment1", "onDetach");
	}
}

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容