ActivityGroup废弃,使用Fragment和FragmentManager替代;
Fragment主要目的是用在大屏幕设备上--例如平板电脑上,支持更加动态和灵活的UI设计。平板电脑的屏幕要比手机的大得多,有更多的空间来放更多的UI组件,并且这些组件之间会产生更多的交互。通过将activity的布局分散到fragment中, 你可以在运行时修改activity的外观,并在由activity管理的back stack中保存那些变化。例如,在一个activity中选择一篇文章并且阅读。
fragment在你的应用中应当是一个模块化和可重用的组件。例如,在屏幕尺寸足够大时,在一个activity中包含多个fragment;屏幕较小时,会启动另一个单独的,使用不同fragment的activity。
fragment生命周期:onAttach-> onCreate-> onCreateView-> onActivityCreated-> onViewStateRestored-> onStart-> onResume-> ****-> onPause-> onStop-> onDestroyView-> onDestroy-> onDetach
fragment与activity通讯:fragment中getActivity方法;activity中getFragmentManager方法。
activity中响应fragment的事件:面向接口编程(观察者模式),activity中实现接口,Fragment中调用相应的接口方法。
android.app.Fragment兼容的最低版本是android:minSdkVersion="11",即不兼容3.0的应用。可以使用<fragment>标签的,这点很重要,如果是用android.support.v4.app.Fragment的话,是不能是用<fragment>标签的,会抛出android.view.InflateException: Binary XML file line #7: Error inflating class fragment异常;android.support.v4.app.Fragment:可以兼容到1.6的版本,不能使用<fragment>标签,需要在程序中通过add或者replace的方式添加,同时还需要android-support-v4.jar
v4的 Fragment implements ComponentCallbacks, OnCreateContextMenuListener{ ****** }
FragmentActivity是继承了Activity,里面变量有:
final FragmentManagerImpl mFragments = ***; //继承了FragmentManager。
final FragmentContainer mContainer=***; //实现了一个接口,主要是findViewById方法。
HashMap<String, LoaderManagerImpl> mAllLoaderManagers;
LoaderManagerImpl mLoaderManager;
类FragmentManagerImpl extends FragmentManager { **** }
类LoaderManagerImpl extends LoaderManager { **** }
ActivityGroup是继承了Activity,里面主要变量有:
LocalActivityManager mLocalActivityManager; // 它使用了主线程对象mActivityThread来装载指定的Activity(装载,不是启动)。LocalActivityManager的startActivity就是利用主线程mActivityThread去装载指定Activity。
TabActivity是继承了ActivityGroup,里面主要变量有:
TabHost mTabHost; //切换按钮。
类TabHost extends FrameLayout implements ViewTreeObserver.OnTouchModeChangeListener { **** }
类FrameLayout extends ViewGroup { **** }
类ViewGroup extends View implements ViewParent, ViewManager { **** }
类View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { ***** }
类ViewSwitcher extends ViewAnimator { **** }
类ViewAnimator extends FrameLayout { **** }
类FrameLayout extends ViewGroup { **** }
类ViewGroup extends View implements ViewParent, ViewManager { **** }
接口ViewManager主要方法有addView,updateViewLayout,removeView。
个人总结:Fragment切换,轻量,UI的转换。 TabActivity属于Activity的切换,涉及到framework的消息传递。