Activity与Fragment的生命周期
Fragment的介绍
Fragment:碎片化内容、短片段;其中碎片化内容体现了轻量化与灵活性;是开发Android平板电脑所需的核心技术之一。通过模块化设计实现界面组织;确保了用户界面组件的有效复用。
- 它位于同一个activity内部作为一个行为或者用户接口的一个组成部分。
- 我们能够将不同种类的Fragments组合在一起放入同一个activity中,并且可以在不同的activity之间重复使用同一个fragment。每个fragment都可以被视为活动中的一个小片段,在其生命周期内独立运行(从创建到销毁),能够接收自身的输入事件,并且可以在活动运行过程中动态地增删片段。
- 每个fragment都必须绑定到某个特定的activity上;尽管有自身的生命周期存在,但仍然会被其宿主activity的生命周期所影响。
例如,在一个activity停止运行时(即pause状态),其内部的所有Fragment也会随之停止。
当activity被销毁时(即消失),其内部的所有Fragment也随之消失。
然而,在一个activity处于resumed生命周期的状态下(即正在恢复或重新执行的状态),我们可以独立地对每个Fragment进行注入、添加或删除操作。
另外,在某个Fragment上进行操作时(即在某个特定的应用场景下),你可以将该Fragment添加到历史栈中去(stack),这个stack由它的宿主Activity维护,并且每一个stack中的元素都是已经执行过的Fragment实例。这个stack让我们可以通过返回键来恢复之前的状态。
4. Fragment可以定义自己的布局文件(layout),当然其也可以没有自己的UI.
5. 当你将某一个Fragment作为活动(Activity)的布局文件的一部分加入进去时,在该Activity的视图层次中会将其放置于ViewGroup中。
- 在activity布局中指定<\fragment>元素即可实现类内fragment的功能。
- 除了通过图形界面配置外,在代码层面也可将该fragment添加至当前ViewGroup(视图组合)中进行管理。请注意:即使不在activity布局文件内也能定义fragments,在不影响可见性的同时可实现内部隐藏功能。
- 需要注意的是 android-support-v4.jar包 是必要的依赖项可通过SDK Manager下载AndroidSupport Package位于Extras目录中的Android Support组件进行获取具体操作时请确保项目根目录下创建libs目录并将该jar文件复制至其中即可完成安装
Activity的生命周期

Fragment的生命周期

Fragment与Activity生命周期的联系

例子
MainActivity代码:
package com.xqq.fragment;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("Activity onCreate");
}
public void click(View view){
Intent intent = new Intent(getApplicationContext(), SecondActivity.class);
startActivity(intent);
}
@Override
protected void onStart() {
System.out.println("Activity onStart");
super.onStart();
}
@Override
protected void onResume() {
System.out.println("Activity onResume");
super.onResume();
}
@Override
protected void onPause() {
System.out.println("Activity onPause");
super.onPause();
}
@Override
protected void onRestart() {
System.out.println("Activity onRestart");
super.onRestart();
}
@Override
protected void onStop() {
System.out.println("Activity onStop");
super.onStop();
}
@Override
protected void onDestroy() {
System.out.println("Activity onDestroy");
super.onDestroy();
}
}
Fragment代码:
package com.xqq.fragment;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment1 extends Fragment{
@Override
public void onAttach(Activity activity) {
System.out.println("Fragment1 onAttach");
super.onAttach(activity);
}
@Override
public void onCreate(Bundle savedInstanceState) {
System.out.println("Fragment1 onCreate");
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println("Fragment1 onCreateView");
return inflater.inflate(R.layout.fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
System.out.println("Fragment1 onActivityCreated");
super.onActivityCreated(savedInstanceState);
}
@Override
public void onStart() {
System.out.println("Fragment1 onStart");
super.onStart();
}
@Override
public void onResume() {
System.out.println("Fragment1 onResume");
super.onResume();
}
@Override
public void onPause() {
System.out.println("Fragment1 onPause");
super.onPause();
}
@Override
public void onStop() {
System.out.println("Fragment1 onStop");
super.onStop();
}
@Override
public void onDestroyView() {
System.out.println("Fragment1 onDestroyView");
super.onDestroyView();
}
@Override
public void onDestroy() {
System.out.println("Fragment1 onDestroy");
super.onDestroy();
}
@Override
public void onDetach() {
System.out.println("Fragment1 onDetach");
super.onDetach();
}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xqq.fragment.MainActivity"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"/>
<fragment
android:name="com.xqq.fragment.Fragment1"
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
将对Activity指定为对话框形式
<activity
android:theme="@android:style/Theme.Dialog"
android:name=".SecondActivity"
android:label="@string/app_name" >
运行结果与分析:
在启动应用程序时创建第一个Activity。
当Application首次显示给用户使用时执行该方法。
在重新使用户可以看到该Application的时候执行该方法,在onStart()之后执行。
当Application获得焦点的时候执行该方法。
当Application失去焦点的时候执行该方法。
在Application不再让用户可见的时候关闭它。
当Application被销毁的时候执行该方法。
//启动应用程序进入MainActivity
07-19 07:41:54.157: I/System.out(732): Fragment1 onAttach
07-19 07:41:54.157: I/System.out(732): Fragment1 onCreate
07-19 07:41:54.157: I/System.out(732): Fragment1 onCreateView
07-19 07:41:54.193: I/System.out(732): Activity onCreate
07-19 07:41:54.193: I/System.out(732): Activity onStart
07-19 07:41:54.193: I/System.out(732): Fragment1 onActivityCreated
07-19 07:41:54.197: I/System.out(732): Fragment1 onStart
07-19 07:41:54.197: I/System.out(732): Activity onResume
07-19 07:41:54.197: I/System.out(732): Fragment1 onResume
//点击按钮进入另外一个Activity
07-19 07:51:59.097: I/System.out(732): Activity onPause
07-19 07:51:59.097: I/System.out(732): Fragment1 onPause
07-19 07:51:59.647: I/System.out(732): Activity onStop
07-19 07:51:59.647: I/System.out(732): Fragment1 onStop
//按手机上的返回键
07-19 07:52:39.268: I/System.out(732): Activity onRestart
07-19 07:52:39.268: I/System.out(732): Activity onStart
07-19 07:52:39.278: I/System.out(732): Fragment1 onStart
07-19 07:52:39.278: I/System.out(732): Activity onResume
07-19 07:52:39.278: I/System.out(732): Fragment1 onResume
//按手机上的Home键
07-19 07:53:07.797: I/System.out(732): Activity onPause
07-19 07:53:07.797: I/System.out(732): Fragment1 onPause
07-19 07:53:08.607: I/System.out(732): Activity onStop
07-19 07:53:08.607: I/System.out(732): Fragment1 onStop
//从应用进程进来
07-19 07:53:16.057: I/System.out(732): Activity onRestart
07-19 07:53:16.057: I/System.out(732): Activity onStart
07-19 07:53:16.057: I/System.out(732): Fragment1 onStart
07-19 07:53:16.067: I/System.out(732): Activity onResume
07-19 07:53:16.067: I/System.out(732): Fragment1 onResume
//按手机上的Home键
07-19 07:53:20.248: I/System.out(732): Activity onPause
07-19 07:53:20.248: I/System.out(732): Fragment1 onPause
07-19 07:53:20.948: I/System.out(732): Activity onStop
07-19 07:53:20.948: I/System.out(732): Fragment1 onStop
07-19 07:53:20.948: I/System.out(732): Activity onDestroy
07-19 07:53:20.948: I/System.out(732): Fragment1 onDestroyView
07-19 07:53:20.948: I/System.out(732): Fragment1 onDestroy
07-19 07:53:20.958: I/System.out(732): Fragment1 onDetach
//如果将第二个Activity的风格指定为对话框形式
07-19 08:03:09.408: I/System.out(2982): Activity onPause
07-19 08:03:09.418: I/System.out(2982): Fragment1 onPause
07-19 08:03:19.537: I/System.out(2982): Activity onResume
07-19 08:03:19.537: I/System.out(2982): Fragment1 onResume
参考文献: <>
图片源自: <>
