第四章 碎片的生命周期

xiaoxiao2021-02-27  430

一、碎片的状态 每个碎片在其生命周期内都可能经历运行、暂停、停止和销毁这几种状态,只不过在一些细小的地方会有部分区别 1、运行状态 当一个碎片是可见的,并且它所关联的活动正处于运行状态是,该碎片也也处于运行状态 2、暂停状态 当一个活动进入到暂停状态时(由于另一个未占满屏幕的活动呗添加到了栈顶),与它相关的可见碎片就会进入到暂停状态。 3、停止状态 当一个活动进入停止状态时,与它相关联的碎片就会进入到停止状态,或者通过调用FragmentTransaction的remove()、replace()方法将碎片从活动中移除,但如果commit()前调用addToBackStack()方法,这时碎片也会进入到停止状态。进入停止状态的碎片对用户来说是完全不可见的,有可能会被系统回收 4、销毁状态 碎片总是依附于活动而存在的,因此活动被销毁时,与它相关联的碎片就会进入到销毁状态。调用FragmentTransaction中的remove()、replace()方法将碎片从活动中移除,当在commit()前没有调用AddToBackStack()此时碎片也进入到销毁状态。

二、碎片的回调 onAttach().当碎片和活动建立关联的时候调用 onCreateView().为碎片创建视图(加载布局)时调用 onActivityCreated().确保与碎片相关联的活动已创建完毕时调用 onDestroyView().当与碎片相关联的视图被移除的时候调用 onDetach(). 当碎片和活动解除关联的时候调用

碎片的生命周期图:

三、通过范例体验碎片生命周期 范例仍是在FragmentTest项目的基础上改动的(代码参照 第四章 探究碎片)

package com.example.kim.fragmenttest; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; /** * Created by KIM on 2017/5/2. */ public class RightFragment extends Fragment { public static final String TAG = "RightFragment"; //碎片和活动建立关联时调用 public void onAttach(Context context){ super.onAttach(context); Log.d(TAG, "onAttach: "); } //活动创建前进行初始化工作 public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); Log.d(TAG, "onCreate: "); } //为碎片加载布局 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ Log.d(TAG, "onCreateView: "); View view=inflater.inflate(R.layout.right_fragment,container,false); return view; } //与碎片相关联的活动创建完毕 public void onActivityCreated(Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); Log.d(TAG, "onActivityCreated: "); } //activity界面被显示出来,用户可以看到部分activity但不能与它交互 public void onStart(){ super.onStart(); Log.d(TAG, "onStart: "); } //activity被显示完全,用户可以获得activity的焦点,并能与它交互 public void onResume(){ super.onResume(); Log.d(TAG, "onResume: "); } //活动可见,但被遮挡,不可进行操作 public void onPause(){ super.onPause(); Log.d(TAG, "onPause: "); } //活动不可见,此时活动有可能被系统销毁回收回收 public void onStop(){ super.onStop(); Log.d(TAG, "onStop: "); } //与碎片相关联的视图被移除,若在这之前调用了AddToBackStack()方法 //则从返回栈返回到上一个碎片时会重新调用onCreateView()方法 public void onDestroyView(){ super.onDestroyView(); Log.d(TAG, "onDestroyView: "); } //活动销毁 public void onDestroy(){ super.onDestroy(); Log.d(TAG, "onDestroy: "); } //碎片和活动解除关联 public void onDetach(){ super.onDetach(); Log.d(TAG, "onDetach: "); } }

运行程序 ⑴当RightFragment第一次被加载到屏幕上 ⑵当按了Button时,AnotherRightFragment替换了RightFragment 但若在替换的时候没有调用addToBackStack()方法,此时的RightFragment就会进入销毁状态,onDestroy()和onDetach()方法就会得到执行 ⑶按下back键 ⑷退出程序

转载请注明原文地址: https://www.6miu.com/read-709.html

最新回复(0)