结论:Fragment只是封装控件状态的数据类以及填充View
从源码中可以看到Fragment没有直接继承View以及ViewGroup,所以不在控件的继承体系当中
int mState = INITIALIZING为默认状态
static final int INITIALIZING = 0; // Not yet created.
static final int CREATED = 1; // Created.
static final int ACTIVITY_CREATED = 2; // Fully created, not started.
static final int STARTED = 3; // Created and started, not res
static final int RESUMED = 4; // Created started and resumed.
当执行performCreate时,mState = CREATED;
当执行performActivityCreated时,mState = ACTIVITY_CREATED;
当执行performStart时,mState = STARTED;
当执行performResume时,mState = RESUMED;
当执行performPause时,mState = STARTED;
当执行performStop时,mState = ACTIVITY_CREATED;
当执行performDestroyView时,mState = CREATED;
当执行performDestroy(),mState = INITIALIZING;
另一个获取UI状态的属性为 FragmentHostCallback mHost;
FragmentHostCallback是一个抽象类,负责封装Activity,context,handler,以及startActivity的跳转行为,请求权限
getActivity()
getContext()
getHandler()
mHost特殊的地方在于是FragmentActivity动态绑定赋值的,并没有在Fragment类内初始化。
下面是伪代码
public void attachHost(@Nullable Fragment parent) {
FragmentActivity.mFragmentManager.attachController(
FragmentActivity, FragmentActivity /container/, parent);
}
FragmentActivity在FragmentController的attachHost方法中把自己作为两个参数传给自己的mFragmentManager的mHost和container属性,然后当mFragmentManager的onCreateView被LayoutInflater调用时,mFragmentManager把mHost赋值给Fragment