安卓學習筆記(二)基本構件

來源:互聯網
上載者:User

標籤:android   des   java   使用   資料   art   

1、Activity

  一個Activity,通常是使用者在某一個時刻,在裝置上看到的單獨的介面。一個應用程式通常含有多個Activity,使用者可在期間進行切換。對使用者而言,這就是程式的外觀部分。

  Activity的生命週期:啟動一個Activity可能會消耗大量資源。他可能會涉及到建立一個Linux進程、為UI對象申請記憶體空間、從UML布局填充所有對象,以及建立整個介面。為了避免這種浪費,Android通過ActivityManager來管理活動的生命週期。

  ActivityManager負責建立、銷毀、管理Activity。

  在Android編程與在其他環境中編程有些區別。在Android中你會發現更多的是對應用程式的狀態改變做出響應,而很少主動改變它的狀態。Android是一個被外部控制和管理起來的環境,與在Javaapplet和servleet中編程有些相似。因此談及Activity的生命週期我們很少會說他的目前狀態,更多的是說狀態轉換過程。

  (1)啟動狀態:onCreate()、onStart()、onResume()

  當一個活動(Activity)還不存在與記憶體中時,我們稱其為啟動(Starting)狀態。當它啟動時,活動會調用一整系列由開發人員有機會指定的回呼函數。最後活動(Activity)hi進入運行狀態(running)。

  注意,從啟動狀態到運行狀態的轉換時最耗時的操作之一。耗時就是耗電,對電池的續航能力也有直接的影響。因此不再顯示的活動不會被輕易的銷毀,而是使它駐留在記憶體中,這樣使用者下次訪問的時候可以節省資源。

  (2)運行狀態

  處於運行狀態的活動,是指當前顯示在螢幕上與使用者互動的活動。我們也稱該活動獲得了焦點(in foucs),意味著所有使用者互動——例如打字,觸控螢幕幕,單擊按鈕——都由這個活動處理。由此可知同一時刻只能有一個活動處於運行狀態。

  正在啟動並執行活動可以優先擷取它所需記憶體或資源,以便盡量以最快的速度運行。

  (3)暫停狀態

  當活動沒有獲得焦點(例如沒有與使用者互動),但仍顯示在螢幕上時,它就處於暫停狀態(paused)。

  活動會在停止前進入暫停狀態。暫停狀態的活動依然擁有擷取記憶體或者其他資源的優先權。因為他們依然顯示在螢幕上,應該盡量避免使使用者感到不自然。

  (4)停止狀態

  當一個活動不再顯示卻依然駐留在記憶體中的時候,我們稱其為停止狀態(stopped)。停止狀態的活動可以再次顯示,成為一個運行狀態,也有可能被銷毀並從記憶體中移除。

  系統會將處於停滯狀態的活動保留一段時間,因為使用者很可能稍後希望在返回到這些活動,並且重新啟動一個停止的活動遠比初始化一個新的活動代價要小。

  停止狀態的活動可能隨時被從記憶體中移除。

  (5)銷毀狀態

  銷毀(destroyed)狀態不在駐留在記憶體中。當Active Manager認為不在需要某個活動的時候機會移除它。在活動被銷毀之前,他可以做一些特定的操作,比如儲存資訊。但是Android並不保證你的活動在銷毀前會先被停止,暫停活動也一樣可能內銷毀。因此,最好在切換回暫停狀態時執行重要的工作。

 

  實際上,運行中的狀態並不意味著他進行中頻繁的運算,他可能只是在那裡等待使用者的輸入。相似的處於停止狀態的活動也不一定什麼都不做。狀態名稱主要是指活動對於使用者輸入的響應程度,換句話說即一個活動是否課件,獲得焦點,或者根本不可見。

 

2、Intent

  Intent是指在主要構件之間傳遞的訊息。它能夠觸發並啟動一個訊息,告訴一個服務啟動還是停止,或者只是簡單地廣播。Intent是非同步,這意味著發動它們的代碼不必等待它們完成並返回。

  Intent分為顯式的(expicit)和隱式的(implicit)兩種。在顯式的Intent中,寄件者需要明確的指定接收Intent的組件。在隱式的Intent中,寄件者只需指定接收者的類型。

3、服務(Service)

  服務運行於後台,沒有任何使用者介面。它們可以喝活動一樣執行相同的操作,但是沒有任何使用者介面。服務用於不管介面上有什麼,我們都希望可以執行一段時間的操作。例如:你可能希望在其它應用程式之間切換時,音樂播放器依然可以播放歌曲。

  服務的生命週期比活動要簡單地多。你可以啟動或停止一個服務,同樣的服務的生命週期或多或少的由開發人員控制,受系統控制相對較少。

  雖然服務運行於後台,但這並不是說它在另一個獨立的線程上運行。而如果一個服務正在執行一段耗時的操作,你通常需要將它放在單獨的線程上處理,否則將影響你的使用者介面的響應速度。簡單地說,服務和活動運行在同一個主應用程式線程中,這個線程也被稱為UI線程。

  注意:不要將Android的服務(這些都是Android英語程式的一部分)和Linux的原生服務、伺服器處理序或者守護進程相混淆(它們都是作業系統更底層的組件)。

4、內容提供器(ContentProvider)

  內容提供器是應用程式之間共用資料的介面。Android預設每個應用程式都運行在自己的沙箱中,這樣該應用程式的所有資料與系統中其它程式的資料就完全隔離了。雖然少量的資料可以通過Intent在不同的應用程式之間傳遞,內容提供器則用於大資料集之間的共用持久資料。為此內容提供器提供了一一套很好的複合DRUD(Creat、Read、Update、Delete)原則。

  內容提供器的介面相對比較簡單,就是標準的insert()、update()、delete()、qurey()方法。這些方法看上去很像標準的資料庫方法,因此為資料庫實現一個內容提供器作為代理業相對簡單。我們應該儘可能的使用內容提供器而不是自己去實現。

5、廣播接收器(BroadcastReceiver)

  廣播接收器是Android在系統層級對“發布——訂閱”機制,或者說觀察者模式(Observer)的實現。接收器一般只是等待,直到其訂閱的事件發生時,才被啟用。

  系統自身時時都在進行著廣播。例如收到一條簡訊,接一個電話等的呢。所有這些事件都被廣播,而且它們可以出發任意數量的接收器。

  可以嚮應用程式的不同部分發送廣播,或者其他完全不同的應用程式發送廣播。

  廣播本身沒有任何可視化的展現,也不會在記憶體中主動進行。但是一旦被觸發,它們可能執行某些代碼,例如啟動一個活動,服務或其他。

6、應用程式上下文(ApplicationContext)

  應用程式上下文是應用程式環境及其所有組件運行所在的進程。它允許應用程式在不同的構件中共用資料和資源。

  不管應用程式中首先啟動的是活動、服務還是其它構件,都會先建立應用陳新股上下文。只要你的應用程式沒有消亡,應用程式上下文也會一直存活。正因為如此,應用程式上下文與生命週期無關。你可以通過Context.getApplicationContext()或Activity.GetApplication()來獲得對內容相關的引用。

  注意,Activity和service都是內容相關的子類,因此他們也就繼承了內容相關的所有方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.