• 軟件測試技術
  • 軟件測試博客
  • 軟件測試視頻
  • 開源軟件測試技術
  • 軟件測試論壇
  • 軟件測試沙龍
  • 軟件測試資料下載
  • 軟件測試雜志
  • 軟件測試人才招聘
    暫時沒有公告

字號: | 推薦給好友 上一篇 | 下一篇

Android 應用程序開發基礎知識

發布: 2011-4-07 13:07 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 174次 | 進入軟件測試論壇討論

領測軟件測試網

  Android應用程序是用java語言寫的,通過aapt工具把應用程序所需要的任何數據、資源文件打包成apk文件,這個文件是一個將應用安裝到手機上的一個載體。

  有很多方式,每個android應用程序存在于不同的世界:

  (1) 默認的,每個應用在他自己的Linux進程中運行,當應用中的任何代碼需要執行時android就啟動相應的進程,當不需要執行時并且系統資源被其他應用請求時android就關閉相應的進程。

  (2) 每個進程都有他自己的虛擬機對象(VM),所以應用程序代碼與其他的應用運行是彼此隔離的。

  (3) 默認的,每個應用被分配一個唯一的Linux user ID,都被設置權限以便應用程序的文件只對用戶可見或者只對應用自己可見。

  安排兩個應用程序共享一個user ID是可能的,這種情況下他們彼此之間是可以看見對方的文件的,為了保護系統資源,擁有相同ID的應用也能被安排運行在一個相同的Linux進程中,共享相同的VM。

  1、 應用組件(Application Components)

  Android一個核心的特點就是一個應用能使用另一個應用的元素(如果另一個應用允許的話),你的應用不需要包含你用到的另一個應用的代碼也不需要你連接這些代碼,相反的,只是當應用需要這些代碼時,就啟動另一個應用相應的代碼(不是讓另一個應用全部啟動)

  為了這個能工作,當一個應用的任何部分被需要時系統必須能啟動這個應用進程,并且將這個部分實例化成java對象,因此,和其他大多數系統不同的是,android應用程序沒有一個單獨的程序入口(例如:沒有main()函數),相反的,android應用有必要的組件以便當需要時系統能實例化并運行它,android中有四種組件:

  (1) Activity

  一個Activity是一個可見的用戶可以使用的用戶界面,如果一個應用中有多個Activity,雖然彼此結合形成一個應用在一起工作,但是每個Activity是彼此獨立的,每個都是Activity的一個子類。

  一個應用程序可能由一個或多個Activity組成,這些Activity這么樣顯示,需要多少個Activity,依賴于這個應用的設計者,一般的,有一個Activity應該被標記成當這個應用啟動時第一個呈現出來給用戶的。

  每個Activity默認的被給予一個窗口來繪制,一般的,這個窗口占滿整個屏幕,但是他可以比屏幕小并且浮在另一個窗口的上面。

  一個窗口中的可見的內容是由一些具有層次關系的view組成的,都是繼承自View類的,每個view都控制一個窗口中的特定的矩形框,parent view 包含children view和組織children view的布局,leaf view(那些在繼承層次最底層的view)繪制在他們所控制的矩形框中,并且對用戶的動作做出直接的回應,因此view就是Activity和用戶交互的地方,android有很多已經做好的view你可以使用,包括buttons,text fields,scroll bars,menu items,check boxes等等

  一個view hierarchy是通過Activity.setContentView()方法被放到一個Activity的window中的,content view是view hierarchy中最頂端的那個view。

  (2) Services

  一個service不是一個用戶可見的組件,在不確定的一段時間內運行在后臺,每個service都繼承自Service類。

  你可以連接(connect)或者綁定(bind)到一個正在運行的service(如果這個service還沒運行的話就啟動它),當連接到service后,你可以通過一個service暴露出來的接口和這個service交流,對music service來說,這個接口可以是允許用戶暫停,后退,停止,重新播放。

  和Activity或者其他組件一樣,service運行在這個應用進程的主線程中,所以他不會阻塞其他的組件或者用戶界面,他們經常為那些耗時長的任務單獨開一個線程。

  (3) Broadcast receivers

  一個broadcast receiver這樣一個組件,他只是接收廣播并作出反應,在系統中有很多已有的廣播,比如反應時區變化(timezone)的,電池變化(battery)的,用戶修改了系統語言時的廣播,應用程序也可以自己定義廣播,比如定義這樣一個廣播,讓其他的應用知道某些數據已經下載完畢了可以使用了。

  一個應用可以有任意多個broadcast receiver來對他所關心的廣播進行監聽并作出反應。所有的receiver都繼承自BroadcastReceiver類。

  BroadcastReceiver不顯示在用戶界面上,然而,他們可以啟動一個Activity來作為他們接收到的信息一種反應,或者他們可以使用NotificationManager來提示用戶,Notifications可以通過不同的方式獲得用戶的注意,比如點亮呼吸燈,震動電話,播放一個聲音等等,他們一般放一個圖標在狀態欄上,來讓用戶可以打開獲得這些信息。

  (4) Content providers

  Content providers是一個應用程序數據的集合,來讓其他的應用可以訪問這些數據,這些數據可以被存在文件系統中,SQLite數據庫中,或者其他可以存數據的地方,Content providers是一個基本的方法集合來使其他的應用可以獲得和存儲這些數據,然而應用不直接調用這些方法,而是使用一個ContentResolver對象來調用這些方法,一個ContentResolver可以和任何的Content providers交流,他和provider協作來管理系統中任何進程間的通信。

  無論何時一個請求都應該由一個特定的組件來處理,android系統來確保包含這個組件的應用進程運行,如果需要就啟動它,如果需要就為這個組件創造一個實例,確保這個組件的一個適當的實例可以被得到。

  2、 啟動組件:intent

  當有一個來自于content resolver的請求指向Content provider時,content provider啟動,其他的三個組件(Activity,service,broadcast receiver)是通過一個叫做intent的異步的消息來啟動的,一個intent持有一個message的內容,對Activity和service來說,他是一個被要求的動作(action)和在該動作上的數據的URI,對broadcast receiver來說,intent對象是一個被廣播的動作。

  針對每種組件分別有對應的方法來啟動它:

  (1) 一個Activity是通過傳遞一個Intent對象到Context.startActivity()或者Activity.startActivityForResult()來啟動的(或者去做一些新的任務),被啟動的這個Activity可以通過getIntent()來獲得導致他啟動的那個intent的。

  (2) 一個service是通過傳遞一個Intent對象到Context.startService()來啟動的(或者給一些新的命令給正在運行的service),android調用service的onStart()方法,并且把Intent對象傳遞給他,同樣的,一個Intent可以傳遞到Context.bindService()方法里來建立一個介于正在運行的service和調用他的組件之間的連接,這個service通過onBind()方法來接收這個Intent對象,(如果這個service還沒有運行,bindservice()能選擇性的啟動它),在后面的部分,關于綁定service的更多詳細的信息請查看遠程調用。

  (3) 一個應用可以通過傳遞一個Intent對象給像Context.sendBroadcast(), Context.sendOrderedBroadcast(), Context.sendStickyBroadcast()這樣的方法來開始一個廣播,android通過調用對應的onReceive()方法將intent傳遞給所有對這個廣播感興趣的broadcast receiver。

  3、 關閉組件(Shutting down components)

  當對來自于content resolver的請求作出回應時content provider就啟動了,當有一個感興趣的broadcast message被廣播時,broadcast receiver啟動,所以我們需要知道怎么關閉這些組件。

  (1) Activity可以通過調用它自己的finish()方法來關閉,一個Activity也可以通過調用finishActivity()來關閉另一個Activity(這個Activity是通過調用startActivityForResult()來啟動的)。

  (2) 一個service可以通過調用自己的stopSelf(),或者Context.stopService()來關閉。

  當組件不再使用時或者android為了更多組件能運行而回收內存時,android系統是關閉這些組件的,在后面的部分,可以在組件的生命周期中看到更多更詳細的介紹。

  4、 Activities and Tasks

  一個Activity可以啟動另一個Activity,即使這個Activity是定義在另一個應用里的,比如說,你想展示給用戶一條街的地圖,現在已經有一個Activity可以做這件事,那么現在你需要做的就是將你請求的信息放進一個Intent對象里,并且通過startActivity()傳遞給他,這個地圖就可以顯示出來了,但用戶按下BACK鍵時,你的Activity又重新出現在屏幕上。

  對用戶來說,顯示地圖的Activity和你的Activity好像在一個應用中的,即使是他們是定義在不用的應用中的,運行在各自的應用進程中,android將兩個Activity放進一個task里,一個task是一組彼此聯系的Activity,被安排在一個堆棧中,堆棧中的根Activity就是開辟這個task的,一般的,他是用戶選擇應用后首先啟動的那個Activity,堆棧頂部的Activity是當前正在運行的Activity,當一個Activity啟動另一個Activity時,新的Activity被壓進堆棧中,成為運行的Activity,當用戶按下BACK鍵,當前的Activity彈出堆棧,先前的Activity恢復成為運行的Activity。

  一個task就是一組Activity的堆棧,不是在manifest文件里的一個類,一個元素,所以沒有方法來為一個task里的Activity獨立的設置值,對task設置值是在root Activity里設置的。

  一個task里的所有Activity組成一個單元,整個task(整個Activity堆棧)可以在前臺,也可以在后臺(應用程序的切換就是task的前后臺的切換),假設,當前的task有四個Activity在堆棧里,用戶按下HOME鍵,去開啟另一個應用(實際上是一個新的task),那么當前的task就退到后臺運行,新開啟的應用的root Activity此時就顯示出來了,然后,過了一段時間,用戶回到主界面,又重新選擇了以前的那個應用(先前的那個task),那么先前的那個task此時又回到了前臺了,當用戶按下BACK鍵時,屏幕不是顯示剛剛關閉的那個應用,而是移除回到前臺的這個task堆棧棧頂Activity,將下一個Activity顯示出來。

延伸閱讀

文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/

TAG: Android android 基礎知識 虛擬機 應用程序

31/3123>

關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97