Android的四大組件 簡介

 

Activity :

activity是Android提供的界面,所有和用戶交互的事情都發生在這個類。

 

Activity的生命週期:

OnCreate() 創建的時候會調用這個方法 設置這個Activity設置佈局控件,初始化數據等。

OnStart() 當控件被我們看到的時候,就調用OnStart()方法 在OnCreate()之後 或者OnStop()後調用。

OnResume() 當重新獲得用戶焦點的時候就調用這個方法。

onPause() 保護現場用的 可能被另外一個透明的Dialog窗口覆蓋,失去焦點,但是他仍然和窗口管理器保持連接,系統可以繼續保護Activity的內部狀態。

onStop()  停止和OnStart()對應,注意OnStop()和OnPause()不一樣的地方是他是完全被另外一個窗口覆滅。也就是失去焦點而且不可見。

onDestory()銷燬

 

創建一個Activity的要點

1.一個Activity就是一個類,並且這個類要繼承Activity

2.需要複寫onCreate方法

3.要在Androidmanifest.xml進行配置(四大組件都要進行配置)

4.爲Activity添加必要的控件

 

在一個Activity啓動另外一個Activity

Intent intent=new Intent(CurrentActivity.this,OtherActivity.class) //OtherActivity也要在AndroidManifest.xml中註冊。

startActivity(intent);

Intent還可以放入各種數據 傳入下一個Activity。

 

可以用下面的方式接收傳過來的數據:

 

還可以用Bundel的方法發送數據。Bundel就像一個承載數據的List<> 裏面可以放各種數據。但是他的key只能是string類型的,放入Intent的方式也是intent.putExtra(bundle);

 

 

Service:

Service在什麼時候會用到呢?比如說音樂程序的時候,需要後臺運行,但是又看不到界面,此時就用到Service。這也是Service和Activity最大的不同。

 

Service 分類:

本地Service和遠程Service。

本地Service是同一個進程內Service彼此之間共同的內存區域。

遠程Service是同一個系統內的不同進程之間訪問(注意是同一個系統內,不是不同系統)。

 

Service生命週期:

onCreate()->onStart()->onDestory() 三個方法 繼承的時候如果要用到記得重新寫下。

 

創建一個Service要點:

1.  創建一個類,要繼承Service

2.  要在androidManifest.xml中進行配置

3.  在Activity中配置調用它

 

Broadcast Receiver:

在android中可以通過broadcast告訴其他程序發生了什麼事情。比如電源,比如短信,比如信號。

Broadcast Receiver相比於其他組件比較特別的地方是他還提供了一種所謂的熱註冊,就是不用寫在androidManifest.xml中,直接用

registerReceiver(Broadcastreceiver,IntentFilter)註冊。然後用unregisterReceiver()消除註冊。

 

一些常用的Action:

ACTION_CALL                                              activity                        啓動一個電話.
ACTION_EDIT                                               activity                       顯示用戶編輯的數據.
ACTION_MAIN                                               activity                      作爲Task中第一個

Activity啓動
ACTION_SYNC                                             activity                         同步手機與數據服務器上的數據.
ACTION_BATTERY_LOW                           broadcast receiver       電池電量過低警告.
ACTION_HEADSET_PLUG                        broadcast receiver        插拔耳機警告
ACTION_SCREEN_ON                               broadcast receiver        屏幕變亮警告.
ACTION_TIMEZONE_CHANGED              broadcast receiver         改變時區警告.

 

Content Provider:

這個組件比較複雜

ContentProvider可以支持多個應用的數據共享。可以用來操作音頻,視頻,圖片,私人通訊錄等等。但是要記得獲取適當的讀取權限。當然也可以用來公開自己的數據。(難道Content Provider是全局變量?整個手機的程序都能訪問得到?)

 

創建Content Provider 要點:

1.  創建一個Content Provider首先要繼承ContentProvider類。

2.       在androidManifest中配置

3.       在Activity類中調用insert() query()可以調用

 

實際上所有的contentprovider用戶都不能直接訪問contentprovider實例,只能通過ContentResolver的中間代理。而要得到ContentResolver的實例可以用Activity的getContentResolver方法。如下

可以自己去調用ContentProvider相應的方法。

 

Uri使用方法:來自http://blog.sina.com.cn/s/blog_5688414b0100xagp.html

爲系統的每一個資源給其一個名字,比方說通話記錄。

1、每一個ContentProvider都擁有一個公共的URI,這個URI用於表示這個ContentProvider所提供的數據。 

2、Android所提供的ContentProvider都存放在android.provider包中。 將其分爲A,B,C,D 4個部分:

 

A:標準前綴,用來說明一個Content Provider控制這些數據,無法改變的;"content://"

 B:URI 的標識,它定義了是哪個Content Provider提供這些數據。對於第三方應用程序,爲了保證URI標識的唯一性,它必須是一個完整的、小寫的 類名。這個標識在 元素的 authorities屬性中說明:一般是定義該ContentProvider的包.類的名稱;"content://hx.android.text.myprovider"

C:路徑,不知道是不是路徑,通俗的講就是你要操作的數據庫中表的名字,或者你也可以自己定義,記得在使用的時候保持一致就ok了

"content://hx.android.text.myprovider/tablename"

D:如果URI中包含表示需要獲取的記錄的ID;則就返回該id對應的數據,如果沒有ID,就表示返回全部;"content://hx.android.text.myprovider/tablename/#" #表示數據id

 

 

數據模型:

ContentProvider返回的數據結構是Cursor類似於DataSet,每一個contentprovider 定義一個唯一公開的URI,用於指定他的數據集。一個contentprovider可以包含多個數據集。這樣就需要多個URI與之對應。URI的開頭必須是 “content://”

表示這個Uri指定一個contentprovider。

 

增刪查改:

 

查詢

Cursor cursor = getContentResolver().query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,null,null);

得到查詢數據:

 

Cursor.moveToNext()讀取到下一條 類似於C#的sdr.read()

條件發在哪裏?

可以放在                                                                                                              

修改:

 

插入:

數據放在values內,values是鍵值對。如下:

ContentValues values = new ContentValues();

values.put(People.NAME, "Abraham Lincoln");

Uri uri = getContentResolver().insert(People.CONTENT_URI, values);

 

 錯誤應該很多 求指點....剛剛開始的Android之旅。。。

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