Android 入門到精通 (Hello,Android World)

來源:互聯網
上載者:User

使用搭建好的Eclipse + ADT 環境。

在Eclipse中選擇 File > New > Project 功能表項目。如果你已經成功安裝了Android 外掛程式,你會在彈出的新項目對話方塊中看到一個叫做“Android”的條目,包含一個”Android Project”的項目

選中"Android Project",點擊 Next進行入下一步。彈出一個項目屬性視窗,要填寫如下域:

Project Name :這是電腦中儲存專案檔目錄的名稱。

Package Name :這是和Java語言意義相同的包名(Package namespace)—你的原始碼將屬於這個包名。同時stub Activity也將據此產生

Activity Name : Android外掛程式將根據這個名稱來建立一個stub類。他是一個繼承自Activity類的子類。Activity類似一個簡單的可以運行和工作的類。它能夠根據你的需要建立使用者介面,當然了這不是必須的。

SDK : 從列表中選取一個SDK, 現在可以從SDK1.1 SDK1.5中選取一個。

自動產生一些代碼:

Android外掛程式執行完畢後將建立一個叫做HelloAndroid類,他的內容如下:

public class HelloAndroid extends Activity { /** Called when the activity is first created. */ /**在activity被建立後執行*/

   @Override   public void onCreate(Bundle icicle)   {       super.onCreate(icicle);       setContentView(R.layout.main);   }

}

可以把這些代碼改成:

public class HelloAndroid extends Activity { /** Called when the activity is first created. */ /**在activity被建立後執行*/

   @Override   public void onCreate(Bundle icicle) {       super.onCreate(icicle);       TextView tv = new TextView(this);       tv.setText("Hello, Android");       setContentView(tv);   }

}

現在可以編譯運行了。

Android提供的Eclipse外掛程式使得運行我們的程式非常簡單。選擇Run > Open Run Dialog菜單;你會看到一個對話方塊,在這個對話方塊中就像配置J2ME運行環境一下,配置一個Luncher.

大功告成!點擊run按鈕,Androi模擬器將運行。當模擬器啟動完成你將看到你的程式。到這裡我們就完成了!

 

按照正常思路,一定會想,程式進入點在哪裡呢?為什麼會從這個Activity 啟動呢?

現在用我們自己的最容易理解的方式來表述:

這是因為當啟動這個程式的映像檔案時,會發送一個事件對象Intent, 帶有MAIN的行為屬性,而自動產生的程式碼及檔案, 有一個AndroidManifest.xml

會為HelloWorld這個Activity 配置一個事件過濾器,表明實現了MAIN action,LAUNCHER category的進入點行為。請注意其中的幾行:
<intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>

 

Application的生命週期

在多數情況下, 每個Android應用運行在自己的Linux進程中. 當一個應用的某段code需要啟動並執行時候這個進程將會被建立, 直到不再需要該應用或系統要為其他的應用釋放記憶體的時候才停止.

一個非常重要且少有的特性是, 應用進程的存活時間不是由這個應用直接控制的. 而是由系統決定的, 系統會根據每個已知的正在啟動並執行應用情況來定奪, 包括, 該應用對使用者的重要性和系統全部可用記憶體.

對於開發人員來講, 瞭解每個應用組件(尤其是, Activity, Service, 和IntentReceiver)對於應用進程存活時間的影響是非常重要的. 如果沒有正確使用, 可能會導致應用進程在處理重要工作的時候被系統殺掉.

在對應用進程生命週期的理解中, 一個典型的錯誤就是當一個IntentReceiver 接收到Intent 之後, 會在自己的onReceiveIntent()方法中開起一個線程, 而後return這個方法. 一旦這個方法return, 系統會認為這個IntentReceiver 不在處於活躍狀態, 也就認為他的宿主進程不再需要(除非還包有其他活躍的應用組件). 以至於當系統需要回收記憶體的時候會隨時釋kill掉這個進程, 中止其中的子線程. 解決這個問題的辦法是在IntentReceiver中啟動一個Service, 這樣系統會知道在這個進程中還有活躍的任務需要完成.

為了決定在記憶體較低的時候殺掉哪個進程, Android會根據運行在這些進程內的組件及他們的狀態把進程劃分成一個"重要程度層次". 其重要的程度按以下規則排序:

  1. 前端進程可以是一個持有運行在螢幕最前端並與使用者互動的Activity的進程(onResume方法被調用時),也可以是持有一個正在啟動並執行IntentReceiver(也就是說他正在執行自己的onReceiveIntent方法)的進程. 在系統中, 只會有少數這樣的進程, 並且除非記憶體已經低到不夠這些進程運行, 否則系統不會主動殺掉這些進程. 這時, 裝置通常已經達到了需要記憶體整理的狀態, 所以殺掉這些進程是為了不讓使用者介面停止回應.
  1. 可視進程是持有一個被使用者可見, 但沒有顯示在最前端 (onPause方法被調用時) 的Activity的進程. 舉例來說, 這種進程通常出現在一個前端Activity以一個對話方塊出現並保持前一個Activity可見時. 這種進程被系統認為是極其重要的, 並且通常不會被殺掉, 除非為了保持所有前端進程正常運行不得不殺掉這些可見進程.
  1. 服務進程是持有一個Service的進程, 該Service是由startService()方法啟動的, 儘管這些進程使用者不能直接看到, 但是通常他們做的工作使用者是十分關注的(例如, 在背景播放mp3或是在後台下載 上傳檔案), 所以, 除非為了保持所有的前端進程和可視進程正常運行外, 系統是不會殺掉服務進程的.
  1. 後台進程是持有一個不再被使用者可見的Activity(onStop()方法被調用時)的進程. 這些進程不會直接影響使用者體驗. 加入這些進程已經完整的,正確的完成了自己的生命週期(訪問Activity查看更多細節), 系統會在為前三種進程釋放記憶體時隨時殺掉這些後台進程. 通常會有很多的後台進程在運行, 所以這些進程被存放在一個LRU列表中, 以保證在低記憶體的時候, 最近一個被使用者看到的進程會被最後殺掉.
  1. 空進程是沒有持有任何活動應用組件的進程. 保留這種進程的唯一理由是為了提供一種緩衝機制, 縮短他的應用下次運行時的啟動時間. 就其本身而言, 系統殺掉這些進程的目的是為了在這些空進程和底層的核心緩衝之間平衡整個系統的資源.

當需要給一個進程分類的時候, 系統會在該進程中處於活動狀態的所有組件裡掉選一個重要等級最高作為分類依據. 查看Activity, Service,和IntentReceiver的文檔, 瞭解每個組件在進程整個生命週期中的貢獻. 每一個classes的文檔詳細描述他們在各自應用的生命週期中所起得作用.

(關於應用程式生命週期部分取自"http://www.androidcn.net/wiki/index.php/Intro/lifecycle")

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.