Android應(yīng)用開(kāi)發(fā)簡(jiǎn)介_(kāi)第1頁(yè)
Android應(yīng)用開(kāi)發(fā)簡(jiǎn)介_(kāi)第2頁(yè)
Android應(yīng)用開(kāi)發(fā)簡(jiǎn)介_(kāi)第3頁(yè)
Android應(yīng)用開(kāi)發(fā)簡(jiǎn)介_(kāi)第4頁(yè)
Android應(yīng)用開(kāi)發(fā)簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、可編輯ppt,1,Android應(yīng)用開(kāi)發(fā),2010年8月13日,可編輯ppt,2,Android平臺(tái)架構(gòu),Android環(huán)境配置和開(kāi)發(fā),Android應(yīng)用程序構(gòu)成,如何開(kāi)發(fā)一個(gè)例子,目錄,可編輯ppt,3,Android平臺(tái)架構(gòu),JNI,JAVA,C/匯編,可編輯ppt,4,簡(jiǎn)介,Linux核心:Android依賴(lài)Linux 2.6來(lái)提供核心的服務(wù),例如存儲(chǔ)管理、進(jìn)程(Process)管理等 Android Runtime:Java語(yǔ)言層級(jí)的Virtual Machine Libraries:Android里已經(jīng)提供的C/C+組件。例如,SQLite、OpenGL 3D等。 應(yīng)用框架(Appl

2、ication Framework,):這是結(jié)合Applications和Libraries的主架構(gòu),讓Libraries組件能不斷地為Applications所重復(fù)使用 應(yīng)用程序(Applications):根據(jù)用戶(hù)的期望而將AF的組件及Libraries組件組合而成的服務(wù),可編輯ppt,5,用漢堡比喻Android 平臺(tái)架構(gòu),可編輯ppt,6,Android環(huán)境配置和開(kāi)發(fā),Android平臺(tái)架構(gòu),Android應(yīng)用程序構(gòu)成,如何開(kāi)發(fā)一個(gè)例子,目錄,可編輯ppt,7,如何安裝 Android SDK 和Eclipse 插件,所需開(kāi)發(fā)環(huán)境: JDK 5 或 JDK 6 (僅有JRE不夠) Ec

3、lipse 3.5 (galileo) 下載ADT 的Eclipse 插件 http:/ 安裝 Eclipse 插件 (ADT) 啟動(dòng) Eclipse,選擇 Help Install New Software,在出現(xiàn)的對(duì)話(huà)框里,點(diǎn)擊Add按鈕,在對(duì)話(huà)框的name一欄輸入“ADT”, 然后點(diǎn)擊Archive.,瀏覽和選擇已經(jīng)下載的ADT插件壓縮文件。 點(diǎn)擊 OK.。返回可用軟件的視圖,你會(huì)看到這個(gè)插件,然后選擇Developer Tools (會(huì)選中下面的“Android Developer Tools”和 “Android Editors“),點(diǎn)擊 Next,最后重啟 Eclipse。 下載A

4、ndroid SDK: http:/ 下載完SDK后,把.zip文件解壓到你電腦上合適位置。啟動(dòng) Eclipse,選擇window-preferences,在打開(kāi)的視圖左邊點(diǎn)擊android,在右邊的SDK Location中選擇Android SDK所在位置,可編輯ppt,8,開(kāi)發(fā)第一個(gè)Android應(yīng)用,打開(kāi)Eclipse,新建項(xiàng)目(點(diǎn)擊FileNewProject),在項(xiàng)目列表中展開(kāi)Android目錄,選擇Android Project,如下圖,可編輯ppt,9,開(kāi)發(fā)第一個(gè)Android應(yīng)用,可編輯ppt,10,開(kāi)發(fā)第一個(gè)Android應(yīng)用,點(diǎn)擊”finish”即可完成項(xiàng)目的創(chuàng)建,創(chuàng)建后

5、的項(xiàng)目已經(jīng)是一個(gè)可運(yùn)行的Android應(yīng)用,我們可以通過(guò)下面方式運(yùn)行此應(yīng)用: 點(diǎn)擊工具欄上手機(jī)形狀的虛擬設(shè)備管理器(簡(jiǎn)稱(chēng)“AVD“),如下,可編輯ppt,11,開(kāi)發(fā)第一個(gè)Android應(yīng)用,在打開(kāi)的虛擬設(shè)備管理器中創(chuàng)建一個(gè)虛擬手機(jī),可編輯ppt,12,開(kāi)發(fā)第一個(gè)Android應(yīng)用,在項(xiàng)目上右鍵點(diǎn)擊run as Android application,如下圖,可編輯ppt,13,Android應(yīng)用程序架構(gòu),src/ java原代碼存放目錄 gen/ 自動(dòng)生成目錄 gen 目錄中存放所有由Android開(kāi)發(fā)工具自動(dòng)生成的文件。目錄中最重要的就是R.java文件。 這個(gè)文件由Android開(kāi)發(fā)工具自

6、動(dòng)產(chǎn)生的。Android開(kāi)發(fā)工具會(huì)自動(dòng)根據(jù)你放入res目錄的xml界面文件、圖標(biāo)與常量,同步更新修改R.java文件。正因?yàn)镽.java文件是由開(kāi)發(fā)工具自動(dòng)生成的,所以我們應(yīng)避免手工修改R.java。R.java在應(yīng)用中起到了字典的作用,它包含了界面、圖標(biāo)、常量等各種資源的id,通過(guò)R.java,應(yīng)用可以很方便地找到對(duì)應(yīng)資源。另外編繹器也會(huì)檢查R.java列表中的資源是否被使用到,沒(méi)有被使用到的資源不會(huì)編繹進(jìn)軟件中,這樣可以減少應(yīng)用在手機(jī)占用的空間。 res/ 資源(Resource)目錄 在這個(gè)目錄中我們可以存放應(yīng)用使用到的各種資源,如xml界面文件,圖片或數(shù)據(jù)。具體請(qǐng)看ppt下方備注欄。

7、AndroidManifest.xml 功能清單文件 這個(gè)文件列出了應(yīng)用程序所提供的功能,在這個(gè)文件中,你可以指定應(yīng)用程序使用到的服務(wù)(如電話(huà)服務(wù)、互聯(lián)網(wǎng)服務(wù)、短信服務(wù)、GPS服務(wù)等等)。另外當(dāng)你新添加一個(gè)Activity的時(shí)候,也需要在這個(gè)文件中進(jìn)行相應(yīng)配置,只有配置好后,才能調(diào)用此Activity。 perties 項(xiàng)目環(huán)境信息,一般是不需要修改此文件,可編輯ppt,14,目錄,Android環(huán)境配置和開(kāi)發(fā),Android平臺(tái)架構(gòu),Android應(yīng)用程序構(gòu)成,如何開(kāi)發(fā)一個(gè)例子,可編輯ppt,15,Android應(yīng)用程序構(gòu)成,Activity,Service,Broad

8、cast Receiver,Content Provider,Intent,可編輯ppt,16,Activity,A visual user interface 通過(guò)view管理UI 每一個(gè)有用戶(hù)界面的應(yīng)用至少包含一個(gè)activity 一個(gè)應(yīng)用可以有多個(gè)activity,其中一個(gè)作為main activity用于啟動(dòng)顯示 Activity通過(guò)startActivity或startActivityForResult啟動(dòng)另外的activity,可編輯ppt,17,Activity生命周期,Activity通過(guò)onCreate被創(chuàng)建 當(dāng)一個(gè)activity失去焦點(diǎn),該activity將進(jìn)入pause

9、狀態(tài),系統(tǒng)在內(nèi)存不足時(shí)會(huì)將其終止 當(dāng)一個(gè)activity被另一個(gè)activity覆蓋,該activity將進(jìn)入stop狀態(tài),系統(tǒng)在需要內(nèi)存的時(shí)候會(huì)將其終止,可編輯ppt,18,Intent,類(lèi)似于消息、事件通知 Intent構(gòu)成:action、category、data Activity、Service、broadcast receiver之間的橋梁,Intent,activity,service,Broadcast receiver,可編輯ppt,19,Intent,兩類(lèi)intent: 顯式:指定具體的目標(biāo)組件處理 startActivity(new Intent(ActivityLifec

10、ycle.this, AnotherActivity.class); 隱式:由系統(tǒng)接受并決定如何處理 startActivity(new Intent(Intent.ACTION_DIAL); 在AndroidManifest.xml中定義activity、service、broadcast receiver接受的intent,可編輯ppt,20,Intent,Intent filter: action、category、data,framework,Component name Action Data Category,intent,component,activity,service,Br

11、oadcast receiver,可編輯ppt,21,實(shí)例,action - DIAL data - tel:01038639592,action - VIEW data - http:/,可編輯ppt,22,Service,沒(méi)有UI,啟動(dòng)之后一直運(yùn)行于后臺(tái) 例子:音樂(lè)播放器 與應(yīng)用程序的其他模塊(例如activity)一同運(yùn)行于主線(xiàn)程中 通過(guò)startService或bindService創(chuàng)建Service 通過(guò)stopService或stopSelf終止Service 一般的,在activity中啟動(dòng)和終止service,可編輯ppt,23,Service生命周期,Context.stop

12、Service() Serivce.stopSelf(,Context.startService(,Context.bindService(,可編輯ppt,24,服務(wù)-Service,Android中的服務(wù)和windows中的服務(wù)是類(lèi)似的東西,服務(wù)一般沒(méi)有用戶(hù)操作界面,它運(yùn)行于系統(tǒng)中不容易被用戶(hù)發(fā)覺(jué),可以使用它開(kāi)發(fā)如監(jiān)控之類(lèi)的程序。服務(wù)的開(kāi)發(fā)比較簡(jiǎn)單,如下: 第一步:繼承Service類(lèi) public class SMSService extends Service,可編輯ppt,25,服務(wù)-Service,第二步:在AndroidManifest.xml文件中的節(jié)點(diǎn)里對(duì)服務(wù)進(jìn)行配置: 服務(wù)不

13、能自己運(yùn)行,需要通過(guò)調(diào)用Context.startService()或Context.bindService()方法啟動(dòng)服務(wù)。這兩個(gè)方法都可以啟動(dòng)Service,但是它們的使用場(chǎng)合有所不同。使用startService()方法啟用服務(wù),調(diào)用者與服務(wù)之間沒(méi)有關(guān)連,即使調(diào)用者退出了,服務(wù)仍然運(yùn)行。使用bindService()方法啟用服務(wù),調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出,服務(wù)也就終止。 如果打算采用Context.startService()方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會(huì)先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onStart()方法。如果調(diào)用startService()方法

14、前服務(wù)已經(jīng)被創(chuàng)建,多次調(diào)用startService()方法并不會(huì)導(dǎo)致多次創(chuàng)建服務(wù),。采用startService()方法啟動(dòng)的服務(wù),只能調(diào)用Context.stopService()方法結(jié)束服務(wù),服務(wù)結(jié)束時(shí)會(huì)調(diào)用onDestroy()方法,可編輯ppt,26,服務(wù)-Service,如果打算采用Context.bindService()方法啟動(dòng)服務(wù),在服務(wù)未被創(chuàng)建時(shí),系統(tǒng)會(huì)先調(diào)用服務(wù)的onCreate()方法,接著調(diào)用onBind()方法。這個(gè)時(shí)候調(diào)用者和服務(wù)綁定在一起,調(diào)用者退出了,系統(tǒng)就會(huì)先調(diào)用服務(wù)的onUnbind()方法,接著調(diào)用onDestroy()方法。如果調(diào)用bindService

15、()方法前服務(wù)已經(jīng)被綁定,多次調(diào)用bindService()方法并不會(huì)導(dǎo)致多次創(chuàng)建服務(wù)及綁定(也就是說(shuō)onCreate()和onBind()方法并不會(huì)被多次調(diào)用)。如果調(diào)用者希望與正在綁定的服務(wù)解除綁定,可以調(diào)用unbindService()方法,調(diào)用該方法也會(huì)導(dǎo)致系統(tǒng)調(diào)用服務(wù)的onUnbind()-onDestroy()方法,可編輯ppt,27,服務(wù)-Service,服務(wù)常用生命周期回調(diào)方法如下: onCreate() 該方法在服務(wù)被創(chuàng)建時(shí)調(diào)用,該方法只會(huì)被調(diào)用一次,無(wú)論調(diào)用多少次startService()或bindService()方法,服務(wù)也只被創(chuàng)建一次。 onDestroy()該方法

16、在服務(wù)被終止時(shí)調(diào)用。 與采用Context.startService()方法啟動(dòng)服務(wù)有關(guān)的生命周期方法 onStart() 只有采用Context.startService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在服務(wù)開(kāi)始運(yùn)行時(shí)被調(diào)用。多次調(diào)用startService()方法盡管不會(huì)多次創(chuàng)建服務(wù),但onStart() 方法會(huì)被多次調(diào)用。 與采用Context.bindService()方法啟動(dòng)服務(wù)有關(guān)的生命周期方法 onBind()只有采用Context.bindService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)綁定時(shí)被調(diào)用,當(dāng)調(diào)用者與服務(wù)已經(jīng)綁定,多次調(diào)用Context.b

17、indService()方法并不會(huì)導(dǎo)致該方法被多次調(diào)用。 onUnbind()只有采用Context.bindService()方法啟動(dòng)服務(wù)時(shí)才會(huì)回調(diào)該方法。該方法在調(diào)用者與服務(wù)解除綁定時(shí)被調(diào)用,可編輯ppt,28,采用startService()啟動(dòng)服務(wù),采用Context.startService()方法啟動(dòng)服務(wù)的代碼如下: public class HelloActivity extends Activity Override public void onCreate(Bundle savedInstanceState) . Button button =(Button) this.fi

18、ndViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() public void onClick(View v) Intent intent = new Intent(HelloActivity.this, SMSService.class); startService(intent); );,可編輯ppt,29,采用bindService()啟動(dòng)服務(wù),采用Context.startService()方法啟動(dòng)服務(wù)的代碼如下: public class HelloActivity extends A

19、ctivity ServiceConnection conn = new ServiceConnection() public void onServiceConnected(ComponentName name, IBinder service) public void onServiceDisconnected(ComponentName name) ; Override public void onCreate(Bundle savedInstanceState) Button button =(Button) this.findViewById(R.id.button); button

20、.setOnClickListener(new View.OnClickListener() public void onClick(View v) Intent intent = new Intent(HelloActivity.this, SMSService.class); bindService(intent, conn, Context.BIND_AUTO_CREATE); /unbindService(conn);/解除綁定 );,可編輯ppt,30,何為Content provider,什么是Content provider? Content Provider 是Android應(yīng)

21、用程序的四大組成部分之一 是android中的跨應(yīng)用訪(fǎng)問(wèn)數(shù)據(jù)機(jī)制 為何需要content provider? Android中每一個(gè)app的資源是私有的 app通過(guò)content provider和其他app共享私有數(shù)據(jù),可編輯ppt,31,如何使用content provider,通過(guò)content resolver訪(fǎng)問(wèn) Context.getContentResolver(,app,ContentResolver,ContentProvider A,ContentProvider B,ContentResolver,ContentResolver,app,app,可編輯ppt,32,如何使

22、用content provider,URI定位資源 content:/contacts/people content:/call_log 類(lèi)似關(guān)系數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)方式 以二維數(shù)據(jù)表的格式暴露數(shù)據(jù),缺省都包含_id字段,delete(Uriurl,String where,StringselectionArgs) insert(Uriurl,ContentValuesvalues) query(Uriuri,Stringprojection,Stringselection, StringselectionArgs,StringsortOrder) update(Uriuri,ContentValue

23、svalues,Stringwhere, StringselectionArgs,可編輯ppt,33,定義自己的content provider,可編輯ppt,34,Android的存儲(chǔ),一般的,應(yīng)用程序的數(shù)據(jù)(包括文件)都是私有的 四種持久存儲(chǔ)方式 Preferences類(lèi)似properties,xml文件 Files DatabaseSQLite Network,可編輯ppt,35,Broadcast receiver,接收和處理android的廣播消息 Android的廣播機(jī)制 系統(tǒng)事件例如變換時(shí)區(qū)、電量低等 應(yīng)用程序發(fā)出廣播消息:sendBroadCast 廣播消息:intent,an

24、droid,app,Broadcast receiver,Send broadcast,可編輯ppt,36,創(chuàng)建Broadcast Receiver,實(shí)現(xiàn)一個(gè)BroadcastReceiver public class MyAndroidReceiver extends BroadcastReceiver override onReceive(Context context, Intents Intents) 注冊(cè)BroadcastReceiver 在AndroidManifest.xml文件當(dāng)中進(jìn)行注冊(cè) 在代碼當(dāng)中直接進(jìn)行注冊(cè),IntentsFilter filter = new Inten

25、tsFilter(NEW_BROADCAST ); MyAndroidReceiver MyAndroidReceiver = new MyAndroidReceiver(); registerReceiver(MyAndroidReceiver , filter,可編輯ppt,37,Broadcast receiver生命周期,Broadcast receiver對(duì)象在onReceive返回后被銷(xiāo)毀,onReceive中不適合處理異步過(guò)程。例如彈出對(duì)話(huà)框與用戶(hù)交互,可使用消息欄替代,可編輯ppt,38,Android權(quán)限控制,在AndroidManifest.xml中描述一個(gè)app的權(quán)限 例

26、如,權(quán)限舉例(參考android. Manifest.permission,可編輯ppt,39,目錄,Android環(huán)境配置和開(kāi)發(fā),Android平臺(tái)架構(gòu),Android應(yīng)用程序構(gòu)成,如何開(kāi)發(fā)一個(gè)例子,可編輯ppt,40,從Internet獲取數(shù)據(jù),利用HttpURLConnection對(duì)象,我們可以從網(wǎng)絡(luò)中獲取網(wǎng)頁(yè)數(shù)據(jù). URL url = new URL(http:/); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6* 1000);/設(shè)置連接超時(shí) if

27、(conn.getResponseCode() != 200) throw new RuntimeException(請(qǐng)求url失敗); InputStream is = conn.getInputStream();/得到網(wǎng)絡(luò)返回的輸入流 String result = readData(is, GBK); conn.disconnect(); System.out.println(result); /第一個(gè)參數(shù)為輸入流,第二個(gè)參數(shù)為字符集編碼 public static String readData(InputStream inSream, String charsetName) thro

28、ws Exception ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte buffer = new byte1024; int len = -1; while( (len = inSream.read(buffer) != -1 ) outStream.write(buffer, 0, len); byte data = outStream.toByteArray(); outStream.close(); inSream.close(); return new String(data, charsetNa

29、me);,可編輯ppt,41,從Internet獲取數(shù)據(jù),利用HttpURLConnection對(duì)象,我們可以從網(wǎng)絡(luò)中獲取文件數(shù)據(jù). URL url = new URL(http:/ HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(6* 1000); if (conn.getResponseCode() != 200) throw new RuntimeException(請(qǐng)求url失敗); InputStream is = conn.getInputStream

30、(); readAsFile(is, Img269812337.jpg); public static void readAsFile(InputStream inSream, File file) throws Exception FileOutputStream outStream = new FileOutputStream(file); byte buffer = new byte1024; int len = -1; while( (len = inSream.read(buffer) != -1 ) outStream.write(buffer, 0, len); outStrea

31、m.close(); inSream.close();,可編輯ppt,42,向Internet發(fā)送請(qǐng)求參數(shù),利用HttpURLConnection對(duì)象,我們可以向網(wǎng)絡(luò)發(fā)送請(qǐng)求參數(shù). String requestUrl = http:/localhost:8080/itcast/contanctmanage.do; Map requestParams = new HashMap(); requestParams.put(age, 12); requestParams.put(name, 中國(guó)); StringBuilder params = new StringBuilder(); for(Ma

32、p.Entry entry : requestParams.entrySet() params.append(entry.getKey(); params.append(=); params.append(URLEncoder.encode(entry.getValue(), UTF-8); params.append,可編輯ppt,43,向Internet發(fā)送請(qǐng)求參數(shù),conn.setDoOutput(true);/發(fā)送POST請(qǐng)求必須設(shè)置允許輸出 conn.setUseCaches(false);/不使用Cache conn.setRequestMethod(POST); conn.set

33、RequestProperty(Connection, Keep-Alive);/維持長(zhǎng)連接 conn.setRequestProperty(Charset, UTF-8); conn.setRequestProperty(Content-Length, String.valueOf(data.length); conn.setRequestProperty(Content-Type,application/x-www-form-urlencoded); DataOutputStream outStream = new DataOutputStream(conn.getOutputStream

34、(); outStream.write(data); outStream.flush(); if( conn.getResponseCode() = 200 ) String result = readAsString(conn.getInputStream(), UTF-8); outStream.close(); System.out.println(result);,可編輯ppt,44,向Internet發(fā)送xml數(shù)據(jù),利用HttpURLConnection對(duì)象,我們可以向網(wǎng)絡(luò)發(fā)送xml數(shù)據(jù). StringBuilder xml = new StringBuilder(); xml.append(); xml.append(); xml.append(中國(guó)); xml.append(); byte xmlbyte = xml.toString().getBytes(UTF-8); URL url = new URL(http:/localh

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論