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之旅。。。