Android總結——Android四大控件

Android四大組件都需要在manifest中進行註冊才能生效

Activity

一個Activity是一個應用程序組件,提供一個屏幕,用戶可以用來交互爲了完成某項任務,一個應用程序通常由多個activities組成,他們通常是鬆耦合關係。

活動的註冊

在manifest中進行註冊

<activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
</activity>

創建一個新應用程序使用Android SDK工具,存根activity自動爲你創建,包含一個intent-filter,聲明瞭activity響應”main”動作,並且應該被 放置 在”launcher”分類
元素指定這是一個”main”入口點對這個應用程序。元素指定,這個activity應該被列入系統應用程序列表中(爲了允許用戶啓動這個activity)。

隱藏標題欄

在setContentView之前調用requestWindowFeature(Window.FEATURE_NO_TITLE)

啓動一個活動

1.使用Intent顯示啓動
2.使用Intent隱式啓動
需要在manifest中活動註冊時候聲明一個intent-filter,然後寫一個唯一標識符,在活動中使用Intent啓動
3.使用Intent隱式發送一份郵件、文件消息
詳細內容可以參考:
http://blog.csdn.net/huashui16318/article/details/47783527

活動間傳遞數據

向下一個活動傳遞數據可通過intent.putExtra來傳遞數據。
如果是要啓動第二個活動時發送數據給第一個活動,則需要通過startActivityForResult(intent,requestCode)(而不是startActivity())。然後從隨後的activity接收結果,實現onActiviryResult()回調函數。當隨後的activity完成,它返回一個結果給你的onActivityResult()函數通過一個intent。

活動的聲明週期

http://blog.csdn.net/huashui16318/article/details/47760419

活動的啓動模式

1.standard
不進行顯示指定的情況下,所有活動都會自動使用這種啓動模式。在這種模式下,每當啓動一個新活動時,就會在返回棧中入棧,並處於棧頂位置。這種情況下系統不會在乎這個活動是否在返回棧中存在,每次啓動都會創建該活動的新的實例。
2.singleTop
在manifest中

 <activity android:launchMode="singleTop">

在這種情況下,在啓動活動時如果發現返回棧的棧頂已經是該活動,則可認爲可以直接使用,而不會在創建新的活動實例。
3.singleTask
在manifest中

 <activity android:launchMode="singleTask">

在這種情況下,在啓動活動時系統會首先在返回棧中檢查是否存在該活動的實例,如果發現已經存在則直接使用該實例,並把在這個活動之上的所有活動出棧,如果發現沒有則會創建一個新的活動實例。
4.singleInstance
在manifest中

 <activity android:launchMode="singleInstance">

指定爲該模式的活動會啓動一個新的返回棧來管理這個活動。

銷燬活動

可以寫一個活動的控制類,在類中寫單個方法,添加活動,移除某個活動,移除所有活動

 public class ActivityCollector{
        public static List<Activity>activities=new ArrayList<Activity>();
        public static void addActivity(Activity activity){
            activities.add(activity);
        }
        public static void removeActivity(Activity activity){
            activities.remove(activity);
        }
        public static void finishAll(){
            for (Activity activity:activities){
                if (!activity.isFinishing()){
                    activity.finish();
                }
            }
        }
    }

Service

用法

1.新建一個類並重寫其onBind()方法(這是Service中唯一一個抽象方法)
2.重寫Service中的
onCreate() 創建服務的時候調用
onStartCommand() 啓動服務的時候調用
onDestroy() 服務銷燬的時候調用

服務的生命週期

其實也就是新建服務類的時候重寫的幾個方法
這裏寫圖片描述

服務的啓動方式

• Context.startService()
• Context.bindService()

 1.  在同一個應用任何地方調用 startService() 方法就能啓動 Service 了,然後系統會回調 Service 類的 onCreate() 以及 onStart() 方法。這樣啓動的 Service 會一直運行在後臺,直到 Context.stopService() 或者 selfStop() 方法被調用。另外如果一個 Service 已經被啓動,其他代碼再試圖調用 startService() 方法,是不會執行 onCreate() 的,但會重新執行一次 onStart() 。

  2. 另外一種 bindService() 方法的意思是,把這個 Service 和調用 Service 的客戶類綁起來,如果調用這個客戶類被銷燬,Service 也會被銷燬。用這個方法的一個好處是,bindService() 方法執行後 Service 會回調上邊提到的 onBind() 方法,你可以從這裏返回一個實現了 IBind 接口的類,在客戶端操作這個類就能和這個服務通信了,比如得到 Service 運行的狀態或其他操作。如果 Service 還沒有運行,使用這個方法啓動 Service 就會 onCreate() 方法而不會調用 onStart()。
  總結:
  1. startService()的目的是回調onStart()方法,onCreate() 方法是在Service不存在的時候調用的,如果Service存在(例如之前調用了bindService,那麼Service的onCreate方法已經調用了)那麼startService()將跳過onCreate() 方法。

  2.  bindService()目的是回調onBind()方法,它的作用是在Service和調用者之間建立一個橋樑,並不負責更多的工作(例如一個Service需要連接服務器的操作),一般使用bindService來綁定到一個現有的Service(即通過StartService啓動的服務)。

IntentService和Service

Service不是一個線程,不能直接處理耗時的操作
IntentService中重要的一個方法就是onHandleIntent。
當我們編寫的耗時邏輯,不得不被service來管理的時候,就需要引入IntentService,IntentService是繼承Service的,那麼它包含了Service的全部特性,當然也包含service的生命週期,那麼與service不同的是,IntentService在執行onCreate操作的時候,內部開了一個線程,去執行耗時操作。

BroadcastReceiver

兩種註冊方式

http://blog.csdn.net/liuhe688/article/details/6955668

ContentProvider

http://blog.csdn.net/huashui16318/article/details/48296531

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章