fragment懒加载时生命周期分析

来源:互联网 发布:保利投资顾问待遇知乎 编辑:程序博客网 时间:2024/06/03 17:00

使用fragment懒加载可以让fragment在没有visible时不加载网络数据,具体生命周期如下:
当fragment不可见时:

E/BFragment: setUserVisibleHint方法执行了
E/BFragment: onInvisible
E/BFragment: onCreate方法执行了
E/BFragment: onCreateView方法执行了
E/BFragment: onStart方法执行了
E/BFragment: onResume方法执行了

当fragment由不可见变为可见时:

E/BFragment: setUserVisibleHint方法执行了
E/BFragment: onVisible

当fragment再次变为不可见时:

E/BFragment: setUserVisibleHint方法执行了
E/BFragment: onInvisible
E/AFragment: onVisible

可以在onVisible和onInvisible进行相关操作,最后贴上BFragment的代码:

public class BFragment extends Fragment {

ImageView img;boolean isVisiable;private static final String TAG = "BFragment";public BFragment() {    // Required empty public constructor}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,                         Bundle savedInstanceState) {    View view = inflater.inflate(R.layout.fragment_b, container, false);    img = (ImageView) view.findViewById(R.id.img);    Log.e(TAG,"onCreateView方法执行了");    return view;}@Overridepublic void onStart() {    super.onStart();    Log.e(TAG,"onStart方法执行了");}@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    Log.e(TAG,"onCreate方法执行了");}@Overridepublic void onResume() {    super.onResume();    Log.e(TAG,"onResume方法执行了");}@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {    super.setUserVisibleHint(isVisibleToUser);    Log.e(TAG,"setUserVisibleHint方法执行了");    if(getUserVisibleHint()){        isVisiable = true;        onVisible();    }else{        isVisiable = false;        onInvisible();    }}private void onInvisible() {    Log.e(TAG,"onInvisible");}private void onVisible() {    Log.e(TAG, "onVisible");    new Thread(new Runnable() {        @Override        public void run() {            try {                Thread.sleep(3000);            } catch (InterruptedException e) {                e.printStackTrace();            }            getActivity().runOnUiThread(new Runnable() {                @Override                public void run() {                    img.setVisibility(View.VISIBLE);                }            });        }    }).start();}

}