è¿æ¯ä¸ç¯ä»ç»androidé¢è¯é¢çæç« ï¼ä¸é¢å°±è®©æ们ä¸èµ·æ¥äºè§£ä¸ä¸å§ï¼
1.android dvm çè¿ç¨åLinuxçè¿ç¨ï¼åºç¨ç¨åºçè¿ç¨æ¯å¦ä¸ºåä¸ä¸ªæ¦å¿µï¼
çï¼dvmæ¯dalivkèææºãæ¯ä¸ä¸ªandroidåºç¨ç¨åºé½å¨èªå·±çè¿ç¨ä¸è¿è¡ï¼é½æ¥æä¸ä¸ªdalivkèææºå®ä¾ãèæ¯ä¸ä¸ªdvmé½æ¯å¨linuxçä¸ä¸ªè¿ç¨ãæ以说å¯ä»¥è®¤ä¸ºæ¯åä¸ä¸ªæ¦å¿µã
2.androidçå¨ç»æåªå ç§ï¼ä»ä»¬çç¹ç¹ååºå«æ¯ä»ä¹ï¼
çï¼ä¸¤ç§ï¼ä¸ç§æ¯tweenå¨ç»ï¼ä¸ç§æ¯frameå¨ç»ãtweenå¨ç»ï¼è¿ç§å®ç°æ¹å¼å¯ä»¥ä½¿è§å¾ç»ä»¶ç§»å¨ï¼æ¾å¤§æ缩å°ä»¥å产çéæ度çååãframeå¨ç»ï¼ä¼ ç»çå¨ç»æ¹æ³ï¼éè¿é¡ºåºçææ¾æå好çå¾çæ¥å®ç°ï¼ç±»ä¼¼çµå½±ã
3.handlerè¿å¶çåçï¼
çï¼androidæä¾äºhandlerålooperæ¥æ»¡è¶³çº¿ç¨é´çéä¿¡ãHandlerå
è¿å
åºååãlooperç¨æ¥ç®¡çç¹å®çº¿ç¨å
对象ä¹é´çæ¶æ¯äº¤æ¢(message Exchange).
1)looper:ä¸ä¸ªçº¿ç¨å¯ä»¥äº§çä¸ä¸ªlooper对象ï¼ç±å®æ¥ç®¡çæ¤çº¿ç¨éçmessage queue(æ¶æ¯éå)
2)handler:ä½ å¯ä»¥æé ä¸ä¸ªhandler对象æ¥ä¸looperæ²éï¼ä»¥ä¾¿pushæ°æ¶æ¯å°messagequeueé;æè
æ¥æ¶looper(ä»messagequeueéååº)æéæ¥çæ¶æ¯ã
3)messagequeue:ç¨æ¥åæ¾çº¿ç¨æ¾å
¥çæ¶æ¯ã
4)线ç¨ï¼UI thread é常就æ¯main thread,èandroidå¯å¨ç¨åºæ¶ä¼ä¸ºå®å»ºç«ä¸ä¸ªmessage queue.
4.android viewçå·æ°ï¼
çï¼Androidä¸å¯¹Viewçæ´æ°æå¾å¤ç§æ¹å¼ï¼ä½¿ç¨æ¶è¦åºåä¸åçåºç¨åºåãææè§æè¦ç´§çæ¯åæ¸
ï¼å¤çº¿ç¨ååç¼å²ç使ç¨æ
åµã
1).ä¸ä½¿ç¨å¤çº¿ç¨ååç¼å²
è¿ç§æ
åµæç®åäºï¼ä¸è¬åªæ¯å¸æå¨Viewåçæ¹åæ¶å¯¹UIè¿è¡éç»ãä½ åªéå¨Activityä¸æ¾å¼å°è°ç¨View对象ä¸çinvalidate()æ¹æ³å³å¯ãç³»ç»ä¼èªå¨è°ç¨ ViewçonDraw()æ¹æ³ã
2).使ç¨å¤çº¿ç¨åä¸ä½¿ç¨åç¼å²
è¿ç§æ
åµéè¦å¼å¯æ°ç线ç¨ï¼æ°å¼ç线ç¨å°±ä¸å¥½è®¿é®View对象äºã强è¡è®¿é®çè¯ä¼æ¥ï¼android.view.ViewRoot$CalledFromWrongThreadExceptionï¼Only the originalthread that created a view hierarchy can touch its views.
è¿æ¶åä½ éè¦å建ä¸ä¸ªç»§æ¿äºandroid.os.Handlerçåç±»ï¼å¹¶éåhandleMessage(Messagemsg)æ¹æ³ãandroid.os.Handleræ¯è½åéåå¤çæ¶æ¯çï¼ä½ éè¦å¨Activityä¸ååºæ´æ°UIçæ¶æ¯ï¼ç¶ååä½ çHandler(å¯ä»¥ä½¿ç¨å¿åå
é¨ç±»)ä¸å¤çæ¶æ¯(å 为å¿åå
é¨ç±»å¯ä»¥è®¿é®ç¶ç±»åéï¼ä½ å¯ä»¥ç´æ¥è°ç¨View对象ä¸çinvalidate()æ¹æ³ )ãä¹å°±æ¯è¯´ï¼å¨æ°çº¿ç¨å建并åéä¸ä¸ªMessageï¼ç¶åå主线ç¨ä¸æè·ãå¤ç该æ¶æ¯ã
3).使ç¨å¤çº¿ç¨ååç¼å²
Androidä¸SurfaceViewæ¯Viewçåç±»ï¼å¥¹åæ¶ä¹å®ç°äºåç¼å²ãä½ å¯ä»¥å®ä¹ä¸ä¸ªå¥¹çå类并å®ç°SurfaceHolder.Callbackæ¥å£ãç±äºå®ç°SurfaceHolder.Callbackæ¥å£ï¼æ°çº¿ç¨å°±ä¸éè¦android.os.Handler帮å¿äºãSurfaceHolderä¸lockCanvas()æ¹æ³å¯ä»¥éå®ç»å¸ï¼ç»å¶ç©æ°çå¾ååè°ç¨unlockCanvasAndPost(canvas)解é(æ¾ç¤º)ï¼è¿æ¯æ¯è¾æ¹ä¾¿å¾ã
5.说说mvc模å¼çåçï¼å®å¨androidä¸çè¿ç¨:
çï¼androidçå®æ¹å»ºè®®åºç¨ç¨åºçå¼åéç¨mvc模å¼ãä½è°mvc?
mvcæ¯model,view,controllerç缩åï¼mvcå
å«ä¸ä¸ªé¨åï¼
l模å(model)对象ï¼æ¯åºç¨ç¨åºç主ä½é¨åï¼ææçä¸å¡é»è¾é½åºè¯¥åå¨è¯¥å±ã
2è§å¾(view)对象ï¼æ¯åºç¨ç¨åºä¸è´è´£çæç¨æ·çé¢çé¨åãä¹æ¯å¨æ´ä¸ªmvcæ¶æä¸ç¨æ·å¯ä¸å¯ä»¥çå°çä¸å±ï¼æ¥æ¶ç¨æ·çè¾å
¥ï¼æ¾ç¤ºå¤çç»æã
3æ§å¶å¨(control)对象ï¼æ¯æ ¹æ®ç¨æ·çè¾å
¥ï¼æ§å¶ç¨æ·çé¢æ°æ®æ¾ç¤ºåæ´æ°model对象ç¶æçé¨åï¼æ§å¶å¨æ´éè¦çä¸ç§å¯¼èªåè½ï¼æ³ç¨ç¨æ·åºåçç¸å
³äºä»¶ï¼äº¤ç»må¦å¾äºå¤çã
androidé¼å±å¼±è¦ååç»ä»¶çéç¨ï¼å¨androidä¸mvcçå
·ä½ä½ç°å¦ä¸ï¼
1)è§å¾å±(view)ï¼ä¸è¬éç¨xmlæ件è¿è¡çé¢çæè¿°ï¼ä½¿ç¨çæ¶åå¯ä»¥é常æ¹ä¾¿çå¼å
¥ï¼å½ç¶ï¼å¦ä½ä½ 对androidäºè§£çæ¯è¾çå¤äºè¯ï¼å°±ä¸å® å¯ä»¥æ³å°å¨androidä¸ä¹å¯ä»¥ä½¿ç¨javascript+htmlççæ¹å¼ä½ä¸ºviewå±ï¼å½ç¶è¿ééè¦è¿è¡javaåjavascriptä¹é´çé ä¿¡ï¼å¹¸è¿çæ¯ï¼androidæä¾äºå®ä»¬ä¹é´é常æ¹ä¾¿çéä¿¡å®ç°ã
2)æ§å¶å±(controller)ï¼androidçæ§å¶å±çé ä»»é常è½å¨äºä¼å¤çacitvityçè©ä¸ï¼è¿å¥è¯ä¹å°±æå«äºä¸è¦å¨acitivityä¸å代ç ï¼è¦éè¿activity交å²modelä¸å¡é»è¾å±å¤çï¼ è¿æ ·åçå¦å¤ä¸ä¸ªåå æ¯androidä¸çacitivityçååºæ¶é´æ¯5sï¼å¦æèæ¶çæä½æ¾å¨è¿éï¼ç¨åºå°±å¾å®¹æ被åæ¶æã
3)模åå±(model)ï¼å¯¹æ°æ®åºçæä½ã对ç½ç»ççæä½é½åºè¯¥å¨modeléé¢å¤çï¼å½ç¶å¯¹ä¸å¡è®¡ç®çæä½ä¹æ¯å¿
é¡»æ¾å¨ç该å±çã
6.Activityççå½å¨æ:
çï¼onCreate: å¨è¿éå建çé¢ï¼åä¸äºæ°æ® çåå§åå·¥ä½
onStart: å°è¿ä¸æ¥åæç¨æ·å¯è§ä¸å¯äº¤äºç
onResume:åæåç¨æ·å¯äº¤äº çï¼(å¨activity æ ç³»ç»éè¿æ çæ¹å¼ç®¡çè¿äºä¸ªActivityçæä¸é¢ï¼è¿è¡å®å¼¹åºæ ï¼ååå°ä¸ä¸ä¸ªActivity)
onPause: å°è¿ä¸æ¥æ¯å¯è§ä½ä¸å¯äº¤äºçï¼ç³»ç»ä¼åæ¢å¨ç» çæ¶èCPU çäºæ
ä»ä¸æçæè¿°å·²ç»ç¥éï¼åºè¯¥å¨è¿éä¿åä½ çä¸äºæ°æ®,å 为è¿ä¸ªæ¶åä½ çç¨åºçä¼å
级éä½ï¼æå¯è½è¢«ç³»ç»æ¶åãå¨è¿éä¿åçæ°æ®ï¼åºè¯¥å¨
onstop: åå¾ä¸å¯è§ï¼è¢«ä¸ä¸ä¸ªactivityè¦çäº
onDestroy: è¿æ¯activity被干æåæåä¸ä¸ªè¢«è°ç¨æ¹æ³äºï¼å¯è½æ¯å¤é¢ç±»è°ç¨finishæ¹æ³æè
æ¯ç³»ç»ä¸ºäºèç空é´å°å®ææ¶æ§çå¹²æ
7.让Activityåæä¸ä¸ªçªå£ï¼
çï¼Activityå±æ§è®¾å®ï¼ææ¶åä¼å个åºç¨ç¨åºæ¯æ¼æµ®å¨ææºä¸»çé¢çãè¿ä¸ªåªéè¦å¨è®¾ç½®ä¸Activityç主é¢theme,å³å¨Manifest.xmlå®ä¹Activityçå°æ¹å ä¸å¥ï¼
android :theme="@android:style/Theme.Dialog"
å¦ææ¯ä½åéæçææï¼
android:theme="@android:style/Theme.Translucent"
8.Androidä¸å¸¸ç¨çäºç§å¸å±:
çï¼LinearLayout线æ§å¸å±;AbsoluteLayoutç»å¯¹å¸å±;TableLayoutè¡¨æ ¼å¸å±;RelativeLayoutç¸å¯¹å¸å±;FrameLayout帧å¸å±;
9.Androidçäºç§æ°æ®åå¨æ¹å¼ï¼
çï¼sharedPreferences;æ件;SQLite;contentProvider;ç½ç»
10.请解éä¸å¨å线ç¨æ¨¡åä¸MessageãHandlerãMessage QueueãLooperä¹é´çå
³ç³»ï¼
çï¼Handlerè·åå½å线ç¨ä¸çlooper对象ï¼looperç¨æ¥ä»åæMessageçMessage Queueéååºmessageï¼åç±Handlerè¿è¡messageçåååå¤çã
11.AIDLçå
¨ç§°æ¯ä»ä¹?å¦ä½å·¥ä½?è½å¤çåªäºç±»åçæ°æ®?
çï¼AIDL(AndroidInterface Definition Language)androidæ¥å£æè¿°è¯è¨
12.ç³»ç»ä¸å®è£
äºå¤ç§æµè§å¨ï¼è½å¦æå®ææµè§å¨è®¿é®æå®é¡µé¢ï¼è¯·è¯´æåç±ï¼
çï¼éè¿ç´æ¥åéUriæåæ°å¸¦è¿å»ï¼æè
éè¿manifestéçintentfilteréçdataå±æ§ã代ç å¦ä¸ï¼
Intent intent = new Intent();
Intent.setAction(âandroid.intent.action.Viewâ);
Uri uriBrowsers = Uri.parse(â
http://www.sina.com.cnâ);
Intent.setData(uriBrowsers);
//å
åãè¦æå¼çactivity
intent.setClassName(âcom.android.browserâ,âcom.android.browser.BrowserActivityâ);
startActivity(intent);
13.ä»ä¹æ¯ANR,å¦ä½é¿å
ï¼
çï¼ANRçå®ä¹ï¼
å¨androidä¸ï¼å¦æä½ çåºç¨ç¨åºæä¸æ®µæ¶é´ååºä¸ç§»çµæï¼ç³»ç»ä¼åç¨æ·æ示âåºç¨ç¨åºæ ååºâ(ANRï¼application Not Responding)对è¯æ¡ãå æ¤ï¼å¨ç¨åºé对ååºæ§è½ç设计å¾éè¦ï¼è¿æ ·ï¼ç³»ç»ä¸ä¼æ¾ç¤ºANRç»ç¨æ·ã
å¦ä½é¿å
ï¼
é¦å
æ¥ç 究ä¸ä¸ºä»ä¹å®ä¼å¨androidçåºç¨ç¨åºéåçåå¦ä½æä½³æ建åºç¨ç¨åºæ¥é¿å
ANR.
androidåºç¨ç¨åºé常æ¯è¿è¡å¨ä¸ä¸ªåç¬ç线ç¨(ä¾å¦ï¼main)éï¼è¿å°±æå³ä½ çåºç¨ç¨åºæåçäºæ
å¦æå¨ä¸»çº¿ç¨éå ç¨äºå¤§é¿æ¶é´çè¯ï¼å°±ä¼å¼åANR对è¯æ¡ï¼å ä¸ºä½ çåºç¨ç¨åºå¹¶æ²¡æç»èªå·±æºä¼æ¥å¤çè¾å
¥äºä»¶æè
Intent广æã
å æ¤ï¼è¿è¡å¨ä¸»çº¿ç¨éçä»»ä½è®¿æ±é½å°½å¯è½å°åäºæ
ãç¹å«æ¯ï¼activityåºè¯¥å¨å®çå
³é®çå½å¨ææ¹æ³(onCreate()åonResume())éå°½å¯è½å°çå»ä½å建æä½ãæ½å¨çèæ¶æä½ï¼ä¾å¦ç½ç»ææ°æ®åºæä½ï¼æè
é«èæ¶ç计ç®å¦æ¹åä½å¾å°ºå¯¸ï¼åºè¯¥å¨å线ç¨é(æè
以æ°æ®åºæä½ä¸ºä¾ï¼éè¿å¼æ¥è¯·æ±çæ¹å¼)æ¥å®æãç¶èï¼ä¸æ¯è¯´ä½ ç主线ç¨é»å¡å¨é£éçå¾
å线ç¨çå®æ---ä¹ä¸æ¯è°ç¨Thread.wait()æè
Thread.sleep()ãæ¿ä»£çæ¹æ³æ¯ï¼ä¸»çº¿ç¨åºè¯¥ä¸ºå线ç¨æä¾ä¸ä¸ªHandler,以便å®ææ¶è½å¤æ交ç»ä¸»çº¿ç¨ã以è¿ç§æ¹å¼è®¾è®¡ä½ çåºç¨ç¨åºï¼å°è½ä¿è¯ä½ ç主线ç¨ä¿æ对è¾å
¥çååºæ§å¹¶è½é¿å
ç±5ç§è¾å
¥äºä»¶çè¶
æ¶å¼åçANR对è¯æ¡ãè¿ç§åæ³åºè¯¥å¨å
¶å®æ¾ç¤ºUIç线ç¨éæ仿ï¼å 为å®ä»¬é½åç¸åçè¶
æ¶å½±åã
IntentReceiveræ§è¡æ¶é´çç¹æ®éå¶æå³çå®åºè¯¥åï¼å¨åå°éåå°çãçç¢çå·¥ä½ï¼å¦ä¿å设å®æ注åä¸ä¸ªNotificationãåå¨ä¸»çº¿ç¨éè°ç¨çå
¶å®æ¹æ³ä¸æ ·ï¼åºç¨ç¨åºåºè¯¥é¿å
å¨BroadcastReceiveréåèæ¶çæä½æ计ç®ï¼ä½ä¹ä¸æ¯å¨å线ç¨éåè¿äºä»»å¡(å 为BroadcastReceiverççå½å¨æç)ï¼æ¿ä»£çæ¯ï¼å¦æååºIntent广æéè¦æ§è¡ä¸ä¸ªèæ¶çå¨ä½çè¯ï¼åºç¨ç¨åºåºè¯¥å¯å¨ä¸ä¸ªServiceã顺便æåä¸å¥ï¼ä½ ä¹åºè¯¥é¿å
å¨Intent Receiveréå¯å¨ä¸ä¸ªActivityï¼å 为å®ä¼å建ä¸ä¸ªæ°çç»é¢ï¼å¹¶ä»å½åç¨æ·æ£å¨è¿è¡çç¨åºä¸æ¢å¤ºç¦ç¹ãå¦æä½ çåºç¨ç¨åºå¨ååºIntent广ææ¶éè¦åç¨æ·å±ç¤ºä»ä¹ï¼ä½ åºè¯¥ä½¿ç¨Notification Manageræ¥å®ç°ã
ä¸è¬æ¥è¯´ï¼å¨åºç¨ç¨åºéï¼100å°200msæ¯ç¨æ·è½æç¥é»æ»çæ¶é´éå¼ï¼ä¸é¢æ»ç»äºä¸äºæå·§æ¥é¿å
ANR,并æå©äºè®©ä½ çåºç¨ç¨åºçèµ·æ¥æååºæ§ã
å¦æä½ çåºç¨ç¨åºä¸ºååºç¨æ·è¾å
¥æ£å¨åå°å·¥ä½çè¯ï¼å¯ä»¥æ¾ç¤ºå·¥ä½çè¿åº¦(ProgressBaråProgressDialog对è¿ç§æ
åµæ¥è¯´å¾æç¨)ãç¹å«æ¯æ¸¸æï¼å¨å线ç¨éå移å¨ç计ç®ãå¦æä½ çç¨åºæä¸ä¸ªèæ¶çåå§åè¿ç¨çè¯ï¼èèå¯ä»¥æ¾ç¤ºä¸ä¸ªSplash Screenæè
å¿«éæ¾ç¤ºä¸»ç»é¢å¹¶å¼æ¥æ¥å¡«å
è¿äºä¿¡æ¯ãå¨è¿ä¸¤ç§æ
åµä¸ï¼ä½ é½åºè¯¥æ¾ç¤ºæ£å¨è¿è¡çè¿åº¦ï¼ä»¥å
ç¨æ·è®¤ä¸ºç¨åºè¢«å»ç»äºã
14.ä»ä¹æ
åµä¼å¯¼è´Force Closeï¼å¦ä½é¿å
ï¼è½å¦æè·å¯¼è´å
¶çå¼å¸¸ï¼
çï¼å¦ç©ºæéçå¯ä»¥å¯¼è´ForceClose;å¯ä»¥çLogcatï¼ç¶åæ¾å°å¯¹åºçç¨åºä»£ç æ¥è§£å³é误ã
15.横ç«å±åæ¢æ¶åçactivityççå½å¨æï¼
çï¼
1) æ°å»ºä¸ä¸ªactivity,并æå个çå½å¨ææå°åºæ¥
2) è¿è¡activityï¼å¾å°å¦ä¸ä¿¡æ¯ï¼
onCreate()Ã
onStart()Ã
onResume()Ã
3) æctrl+F12åæ¢æ横å±æ¶
onSaveInstanceState()Ã
onPause()Ã
onStop()Ã
onDestroy()Ã
onCreate()Ã
onStart()Ã
onRestoreInstanceState()Ã
onResume()Ã
4) åæctrl+f12åæ¢æç«å±æ¶ï¼åç°æå°äºä¸¤æ¬¡ç¸åçLog
onSaveInstanceState()Ã
onPause()Ã
onStop()Ã
onDestroyÃ
onCreate()Ã
onStart()Ã
onRestoreInstanceState()Ã
onResume()Ã
onSaveInstanceState()Ã
onPause()Ã
onStop()Ã
onDestroyÃ
onCreate()Ã
onStart()Ã
onRestoreInstanceState()Ã
onResume()Ã
5) ä¿®æ¹AndroidManifest.xmlï¼æ该Activityæ·»å android:configChanges=âorientationâ,æ§è¡æ¥éª¤3
onSaveInstanceState()Ã
onPause()Ã
onStop()Ã
onDestroy()Ã
onCreate()Ã
onStart()Ã
onRestoreInstanceState()Ã
onResume()Ã
6) ä¿®æ¹AndroidManifest.xmlï¼æ该Activityæ·»å android:configChanges=âorientationâ,æ§è¡æ¥éª¤4,åç°ä¸ä¼åæå°ç¸åä¿¡æ¯ï¼ä½å¤æå°äºä¸è¡onConfigChanged
onSaveInstanceState()Ã
onPause()Ã
onStop()Ã
onDestroy()Ã
onCreate()Ã
onStart()Ã
onRestoreInstanceState()Ã
onResume()Ã
onConfigurationChanged()Ã
7) ææ¥éª¤5çandroid:configChanges=âorientationâæ¹æ
android:configChanges=âorientation|keyboradHiddenâ,æ§è¡æ¥éª¤3ï¼å°±åªæå°onConfigChanged
onConfigurationChanged()Ã
8) ææ¥éª¤5çandroid:configChanges=âorientationâæ¹æ
android:configChanges=âorientation|keyboradHiddenâ,æ§è¡æ¥éª¤4
onConfigurationChanged()Ã
onConfigurationChanged()Ã
æ»ç»ï¼
1) ä¸è®¾ç½®activityçandroid:configChangesæ¶,åå±ä¼éæ°è°ç¨å个çå½å¨æï¼å横å±æ¶ä¼æ§è¡ä¸æ¬¡ï¼åç«å±æ¶ä¼æ§è¡ä¸¤æ¬¡ã
2) 设置activityçandroid:configChanges=âorientationâæ¶, åå±ä¼éæ°è°ç¨å个çå½å¨æï¼å横å±ãç«å±æ¶é½åªä¼æ§è¡ä¸æ¬¡ï¼ä½æ¯ç«å±æåå¤æå°ä¸æ¡onConfigurationChanged()
3) 设置activityçandroid:configChanges=âorientation|keyboardHiddenâæ¶,åå±ä¸ä¼éæ°è°ç¨å个çå½å¨æï¼åªä¼æ§è¡onConfigurationChanged(),横å±ä¸æ¬¡ï¼ç«å±ä¸¤æ¬¡
åæ»ç»ä¸æ´ä¸ªactivityççå½å¨æï¼
1) å½åactivity产çäºä»¶å¼¹åºToaståAlertDialogçæ¶åActivityççå½å¨æä¸ä¼ææ¹å
2) Activityè¿è¡æ¶æä¸HOMEé®(è·è¢«å®å
¨è¦çä¸æ ·ç)
onSavaInstanceStateÃ
onPauseÃ
onStopÃ
onRestartÃ
onStartÃ
onResumeÃ
3) æªè¢«å®å
¨è¦çï¼åªæ¯å¤±å»ç¦ç¹ï¼
onPauseÃ
onResumeÃ
16.å¦ä½å°SQLiteæ°æ®åº(.dbæ件)ä¸apkæ件ä¸èµ·åå¸?
çï¼å¯ä»¥å°.dbæ件å¤å¶å°Eclipse Androidå·¥ç¨ä¸çres awç®å½ä¸ãææå¨res awç®å½ä¸çæ件ä¸ä¼è¢«å缩ï¼è¿æ ·å¯ä»¥ç´æ¥æå该ç®å½ä¸çæ件ãå¯ä»¥å°.dbæ件å¤å¶å°res awç®å½ä¸
17.å¦ä½å°æå¼res awç®å½ä¸çæ°æ®åºæ件?
çï¼å¨Androidä¸ä¸è½ç´æ¥æå¼res awç®å½ä¸çæ°æ®åºæ件ï¼èéè¦å¨ç¨åºç¬¬ä¸æ¬¡å¯å¨æ¶å°è¯¥æ件å¤å¶å°ææºå
åæSDå¡çæ个ç®å½ä¸ï¼ç¶ååæå¼è¯¥æ°æ®åºæ件ãå¤å¶çåºæ¬æ¹æ³æ¯ä½¿ç¨getResources().openRawResourceæ¹æ³è·å¾res awç®å½ä¸èµæºç InputStream对象ï¼ç¶åå°è¯¥InputStream对象ä¸çæ°æ®åå
¥å
¶ä»çç®å½ä¸ç¸åºæ件ä¸ãå¨Android SDKä¸å¯ä»¥ä½¿ç¨SQLiteDatabase.openOrCreateDatabaseæ¹æ³æ¥æå¼ä»»æç®å½ä¸çSQLiteæ°æ®åºæ件ã
18.android ä¸æåªå ç§è§£æxmlçç±»ï¼å®æ¹æ¨èåªç§ï¼ä»¥åå®ä»¬çåçååºå«ï¼
çï¼XML解æ主è¦æä¸ç§æ¹å¼ï¼SAXãDOMãPULLã常è§å¨PCä¸å¼åæ们使ç¨Domç¸å¯¹è½»æ¾äºï¼ä½ä¸äºæ§è½ææçæ°æ®åºæææºä¸è¿æ¯ä¸»è¦éç¨SAXæ¹ å¼ï¼SAX读åæ¯ååçï¼ä¼ç¹:ä¸å å
å空é´ã解æå±æ§æ¹ä¾¿ï¼ä½ç¼ºç¹å°±æ¯å¯¹äºå¥åµå¤ä¸ªåæ¯æ¥è¯´å¤çä¸æ¯å¾æ¹ä¾¿ãèDOMæ¹å¼ä¼ææ´ä¸ªXMLæ件å è½½å°å
å ä¸å»ï¼è¿éAndroidå¼åç½æé大家该æ¹æ³å¨æ¥æ¾æ¹é¢å¯ä»¥åXPathå¾å¥½çç»åå¦ææ°æ®éä¸æ¯å¾å¤§æ¨è使ç¨ï¼èPULL常常ç¨å¨J2ME对äºèç¹å¤ çæ¯è¾å¥½ï¼ç±»ä¼¼SAXæ¹å¼ï¼åæ ·å¾èçå
åï¼å¨J2MEä¸æ们ç»å¸¸ä½¿ç¨çKXMLåºæ¥è§£æã
19.DDMSåTraceViewçåºå«?
çï¼DDMSæ¯ä¸ä¸ªç¨åºæ§è¡æ¥çå¨ï¼å¨éé¢å¯ä»¥çè§çº¿ç¨åå æ çä¿¡æ¯ï¼TraceViewæ¯ç¨åºæ§è½åæå¨
20.è°è°AndroidçIPCæºå¶ï¼
çï¼IPCæ¯å
é¨è¿ç¨éä¿¡çç®ç§°ï¼æ¯å
±äº«"å½å管é"çèµæºãAndroidä¸çIPCæºå¶æ¯ä¸ºäºè®©ActivityåServiceä¹é´å¯ä»¥éæ¶çè¿è¡äº¤äºï¼æ
å¨Androidä¸è¯¥æºå¶ï¼åªéç¨äºActivityåServiceä¹é´çéä¿¡ï¼ç±»ä¼¼äºè¿ç¨æ¹æ³è°ç¨ï¼ç±»ä¼¼äºC/S模å¼ç访é®ãéè¿å®ä¹AIDLæ¥å£æ件æ¥å®ä¹IPCæ¥å£ãServier端å®ç°IPCæ¥å£ï¼Client端è°ç¨IPCæ¥å£æ¬å°ä»£çã
21.NDKæ¯ä»ä¹ï¼
çï¼NDKæ¯ä¸ç³»åå·¥å
·çéå
NDKæä¾äºä¸ç³»åçå·¥å
·ï¼å¸®å©å¼åè
è¿
éçå¼åC/C++çå¨æåºï¼å¹¶è½èªå¨å°soåjavaåºç¨ææapkå
NDKéæäºäº¤åç¼è¯å¨ï¼å¹¶æä¾äºç¸åºçmkæ件åé离cpuï¼å¹³å°ççå·®å¼ï¼å¼å人ååªéç®åçä¿®æ¹mkæ件就å¯ä»¥å建åºso
22.æè¿°ä¸ä¸androidçç³»ç»æ¶æï¼
çï¼androidç³»ç»æ¶æåä»ä¸å¾ä¸ä¸ºLinuxå
æ ¸å±ãè¿è¡åºãåºç¨ç¨åºæ¡æ¶å±ååºç¨ç¨åºå±ã
Linuxå
æ ¸å±ï¼è´è´£ç¡¬ä»¶ç驱å¨ç¨åºãç½ç»ãçµæºãç³»ç»å®å
¨ä»¥åå
å管ççåè½ã
è¿è¡åºåandroidruntionï¼è¿è¡åºï¼å³c/c++å½æ°åºé¨åï¼å¤§å¤æ°é½æ¯å¼æ¾æºä»£ç çå½æ°åºï¼ä¾å¦webkitï¼è¯¥å½æ°åºè´è´£androidç½é¡µæµè§å¨çè¿è¡;ä¾å¦æ åçcå½æ°åºlibcãopensslãsqliteçï¼å½ç¶ä¹å
æ¬æ¯æ游æå¼åç2dsglå3dopenglesï¼å¨å¤åªä½æ¹é¢æmediaframeworkæ¡æ¶æ¥æ¯æåç§å½±é³åå¾å½¢æ件çææ¾ä¸æ¾ç¤ºï¼å¦mpeg4ãh.264ãmp3ãaacãamrãjpgåpngçä¼å¤çå¤åªä½æä»¶æ ¼å¼ãAndroidruntionè´è´£è§£éåæ§è¡çæçdalvikæ ¼å¼çåèç
åºç¨è½¯ä»¶æ¶æï¼javaåºç¨ç¨åºå¼å人å主è¦æ¯ä½¿ç¨è¯¥å±å°è£
好çapiè¿è¡å¿«éå¼åçã
åºç¨ç¨åºå±ï¼è¯¥å±æ¯javaçåºç¨ç¨åºå±ï¼androidå
ç½®çgooglemapsãemailãIMãæµè§å¨çï¼é½å¤äºè¯¥å±ï¼javaå¼å人åå·¥åçç¨åºä¹å¤äºè¯¥å±ï¼èä¸åå
ç½®çåºç¨ç¨åºå
·æå¹³ççå°ä½ï¼å¯ä»¥è°ç¨å
ç½®çåºç¨ç¨åºï¼ä¹å¯ä»¥æ¿æ¢å
ç½®çåºç¨ç¨åº