1. 程式人生 > >《android開發-從小工到專家》學習記錄(一)

《android開發-從小工到專家》學習記錄(一)

我對android系統學習的第一本書是《android移動應用基礎教程》-鐵路出版社;

對於android開發的基礎知識有了一定的瞭解,能開發一些基本的安卓端應用,現在進行安卓進階技術的學習,寫此係列部落格以督促自己,希望能提高學習效率,加強學習深度。

第一章  Android的構成基石---四大元件

1.1  Activity

    actvity可以理解為一個使用者介面,在應用中,當我們去寫一個activity的時候,會先去載入指定的佈局檔案,獲取相關的UI元素並設定事件處理函式,使得使用者可以與這些UI進行互動。除此之外還需要處理一些activity之間的跳轉,資料傳輸,從而完成特定的操作流程;較為淺顯地理解activity就是一個特定的類,其繼承於Activity抽象類,必須實現onCreate方法;而對於一整個activity來說,有其所處的生命週期的不同階段,在不同階段會回撥不同的生命週期函式,onCreate()函式就是在activity第一次被建立時呼叫的,通常會在這函式裡面完成activity的初始化操作。activity的生命週期網上講述的很多,實際操作中也經常會用到相關函式,在此不多做敘述。

activity的構成不僅僅是一個佈局檔案,檢視會被設定給Window類,Window中還有一個DecorView,此為整個視窗的頂級檢視,開發人員設定的佈局會被設定到此DecorView的mContentParent中。即android中內建了一些系統佈局xml,這也就解釋了為啥總有個那麼醜的標題欄擺著。

activity有四種啟動模式,簡述如下:

①standard:標準啟動模式+預設啟動模式,任務棧中可以存在多個activity例項;

②singleTop:可以理解為棧頂唯一啟動模式,如果此activity在棧頂,也就是當前顯示,則再啟動activity的時候不會建立新的例項,呼叫onNewIntent()函式,而除此之外,仍然會建立一個新的例項;

③singleTask:一個任務棧中只能有一個該activity,if(activity 不在棧中){建立新的例項;}else{銷燬所有處在該activity上的activity,最終讓activity例項處於棧頂,回撥onNewIntent();}

④singleInstance:在一個獨立的任務中開啟activity,且次任務中只存在一個例項,再次啟動activity的時候,會重用已存在的任務和例項。

1.2 Service Service不依賴於使用者介面,實現了程式的後臺執行,而需要注意,其仍然執行在UI執行緒中,所以不要在Service中直接進行耗時操作;Service分為start和bind兩種啟動方法,這兩種方法很好理解區分,如果你需要啟動一個不需要資料互動,方法呼叫的服務,使用start就是很單純的開啟一個服務即可,而如果需要進行一些相互呼叫之類的事情,則使用bind方法,不要老去理解什麼繫結不繫結,這兩個都是開啟服務的方法,知道這個就行了。 start方法簡單,呼叫Context的startService()函式,相應服務就啟動了,知道你stop它位置,Service可以stopself也可以被stop;這既然是四大元件之一,那我們再簡單的理解這就是個JAVA類,繼承了Service,需要在Mainfest中進行註冊; bindService也很好理解,在我們寫的Service中有一個必須寫的函式加onBind(),這個函式返回一個IBinder物件,這理解為一個通訊員就行,在bindService開啟服務的時候需要傳入一個ServiceConnection,在bind之後會回撥onServiceConnected()函式表示繫結成功,這是onBind()返回的IBinder物件就被返回到activity中,通過這個物件就可以去進行服務中的方法呼叫,可以理解為通過這個進行服務的私用化。 AIDL更簡單,就是IBinder變成Stub,Stub是啥,,自己瞭解一下AIDL是啥就好,寫給自己看的東西不廢那麼多話。 1.3 Broadcast 廣播是一種在應用程式之間傳輸資訊的機制,一個廣播可以有任意個接受者,屬於釋出---訂閱的模式,也就是觀察者模式,其最大特點在於傳送方不關心接收方是否收到資料,也不關心接收方如何處理資料,通過這樣的形式達到接收雙方的完全解耦合。廣播機制三要素:傳送廣播的Broadcast,接受廣播的BroadcastReciver以及用於傳遞資訊的Intent。廣播可分為普通廣播,有序廣播和Sticky廣播。 在21版的Support v4包中新增本地廣播,LocalBroadcastManager,有時候我們不需要把自己應用內的資訊廣播給所有應用,而只是程序內使用,本地廣播就可以實現這一的效果。 Sticky廣播會一直滯留,當有匹配此廣播的廣播接收器被註冊之後,該廣播接收器就會收到此條廣播。 1.4 ContentProvider 外共享資料,最簡單的用法,通過contentresolver和uri查詢獲取相簿中的圖片,uri就理解為一個地址,可以詳細到某一條具體的資料,也可以是一個很廣的範圍,我們通過uri查詢,返回一個數據集合,就像資料庫的操作一樣。還有很多細的可以講,但最好還是在實際碼程式碼中操作會比較好。