1. 程式人生 > >android fragment和activity的區別

android fragment和activity的區別

最近去公司面試的時候我發現現在很多的面試官都會問Fragment和Activity的區別在哪裡?本人根據自己的一些開發經驗和自己面試的一些情況編寫了這個部落格,希望對面試者有所幫助,好了,直接切入主題。

  我們來看看Fragment和Activity的區別?

  我簡單的來總結幾點具體的和我們面試的時候要怎麼來回答面試官。

  1. Fragment是到Android3.0+ 以後,Android新增了Fragments,在沒有 Fragment 之前,一個螢幕只能放一個 Activity。這是一個起源時間大家要知道是什麼時候開始引入的。
  2. .Activity 代表了一個螢幕的主體,而Fragment可以作為Activity的一個組成元素。
    一個Activity可以有若干個(0或n)Fragment構成。你可以把Fragment想象成Activity中的一個控制元件,只不過相對於一般控制元件,Fragment與Activity聯絡更為緊密,隨著Activity的生命週期變化,Fragment也隨之相應不同的生命週期函式。
    Fragment 從功能上講相當於一個子活動(Activity),它可以讓多個活動放到同一個螢幕上,也就是對使用者介面和功能的重用,因為對於大屏裝置來說,純粹的 Activity 有些力不從心。
  3. Fragment 像是一個子活動,但是 Fragment 不是 Activity 的擴充套件,因為 Fragment 擴充套件自 android.app 中的 Object,而 Activity 是 Context 的子類。Fragment 有自己的檢視層級結構,有自己的活動週期,還可以像活動一樣響應後退按鈕,Fragment 還有一個用作其初始化引數的包(Bundle),類似 Activity,Fragment 也可由系統自動儲存並在以後還原。當系統還原 Fragment 時,它呼叫預設的建構函式(沒有引數),然後將此Bundle還原到新建立的 Fragment 中,所以無論新建還是還原 Fragment,都要經過兩個步驟:
    (1)呼叫預設建構函式(2)傳入新的或者儲存起來的Bundle。
  4. 一個Activity可以執行多個 Fragment,Fragment 切換時,由 FragmentTransaction 執行,切換時,上一個 Fragment 可以儲存在後退棧中(Back Stack),這裡的後退棧由 FragmentManager 來管理,注意 Fragment 和 Activity 的後退棧是有區別的:Activity 的後退棧由系統管理,而 Fragment 的後退棧由所在的Activity 管理。
  5. Fragment不能脫離Activity而存在,只有Activity才能作為接收intent的載體。其實兩者基本上是載體和組成元素的關係。
  6. Fragment用來描述一些行為或一部分使用者介面在一個Activity中,你可以合併多個fragment在一個單獨的activity中建立多個UI面板,同時重用fragment在多個activity.你可以認為fragment作為一個activity中的一節模組fragment有自己的生命週期,接收自己的輸入事件,你可以新增或移除從執行中的activity.一個fragment必須總是嵌入在一個activity中,同時fragment的生命週期受activity而影響,舉個例子吧,當activity暫停,那麼所有在這個activityfragments將被destroy釋放。然而當一個activity在執行比如resume時,你可以單獨的操控每個fragment,比如新增或刪除。不過因為FragmentActivity的生命週期都比較複雜,我們分別對比下:建立一個fragment你必須建立一個Fragment的子類或存在的子類,比如類似下面的程式碼

    public static class AndroidFragment extends Fragment{
       @Override
       public View onCreateView(LayoutInflaterinflater, ViewGroup container,
                             Bundle savedInstanceState) { 
               return inflater.inflate(R.layout.android_fragment,container, false);
        }
   }

     Fragment類的一些程式碼看起來有些像Activity為了讓大家瞭解清楚,Android開發網給大家整理下          Fragment的生命週期大家可以參考一下網上關於生命週期的介紹                     http://www.cnblogs.com/purediy/p/3276545.html,部分類似Activity的,我們詳細解釋

onCreate()
當fragment建立時被呼叫,你應該初始化一些實用的元件,比如在fragment暫停或停止時需要恢復的

onCreateView()
當系統呼叫fragment在首次繪製使用者介面時,如果畫一個UI在你的fragment你必須返回一個View當然了你可以返回null代表這個fragment沒有UI.

那麼如何新增一個Fragment到Activity中呢? Activity的佈局可以這樣寫

<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment android:name="com.android.cwj.ArticleListFragment"
           android:id="@+id/list"
           android:layout_weight="1"
           android:layout_width="0dp"
           android:layout_height="match_parent" />
    <fragment android:name="com.android.cwj.ArticleReaderFragment"
           android:id="@+id/viewer"
           android:layout_weight="2"
           android:layout_width="0dp"
           android:layout_height="match_parent" />
</LinearLayout>

希望對大家有所幫助 謝謝! 有事可以加QQ詳細瞭解 QQ:545614498