android應用開發框架是 Application Framework. 其系統架構由5部分組成,分別是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。第二部分將詳細介紹這5個部分。下面自底向上分析各層。
創新互聯 - 雅安機房托管,四川服務器租用,成都服務器租用,四川網通托管,綿陽服務器托管,德陽服務器托管,遂寧服務器托管,綿陽服務器托管,四川云主機,成都云主機,西南云主機,雅安機房托管,西南服務器托管,四川/成都大帶寬,成都機柜租用,四川老牌IDC服務商
Android架構
1、Linux Kernel
Android基于Linux 2.6提供核心系統服務,例如:安全、內存管理、進程管理、網絡堆棧、驅動模型。Linux Kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細節而為上層提供統一的服務。 如果你學過計算機網絡知道OSI/RM,就會知道分層的好處就是使用下層提供的服務而為上層提供統一的服務,屏蔽本層及以下層的差異,當本層及以下層發生了變化不會影響到上層。也就是說各層各盡其職,各層提供固定的SAP(Service Access Point),專業點可以說是高內聚、低耦合。 如果你只是做應用開發,就不需要深入了解Linux Kernel層。
2、Android Runtime
Android包含一個核心庫的集合,提供大部分在Java編程語言核心類庫中可用的功能。每一個Android應用程序是Dalvik虛擬機中的實例,運行在他們自己的進程中。Dalvik虛擬機設計成,在一個設備可以高效地運行多個虛擬機。Dalvik虛擬機可執行文件格式是.dex,dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。 大多數虛擬機包括JVM都是基于棧的,而Dalvik虛擬機則是基于寄存器的。兩種架構各有優劣,一般而言,基于棧的機器需要更多指令,而基于寄存器的機器指令更大。dx 是一套工具,可以將 Java .class 轉換成 .dex 格式。一個dex文件通常會有多個.class。由于dex有時必須進行最佳化,會使文件大小增加1-4倍,以ODEX結尾。 Dalvik虛擬機依賴于Linux 內核提供基本功能,如線程和底層內存管理。
3、Libraries
Android包含一個C/C++庫的集合,供Android系統的各個組件使用。這些功能通過Android的應用程序框架(application framework)暴露給開發者。下面列出一些核心庫: 系統C庫--標準C系統庫(libc)的BSD衍生,調整為基于嵌入式Linux設備 媒體庫--基于PacketVideo的OpenCORE。這些庫支持播放和錄制許多流行的音頻和視頻格式,以及靜態圖像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG 界面管理--管理訪問顯示子系統和無縫組合多個應用程序的二維和三維圖形層 LibWebCore--新式的Web瀏覽器引擎,驅動Android 瀏覽器和內嵌的web視圖 SGL--基本的2D圖形引擎 3D庫--基于OpenGL ES 1.0 APIs的實現。庫使用硬件3D加速或包含高度優化的3D軟件光柵 FreeType --位圖和矢量字體渲染 SQLite --所有應用程序都可以使用的強大而輕量級的關系數據庫引擎
4、Application Framework
通過提供開放的開發平臺,Android使開發者能夠編制極其豐富和新穎的應用程序。開發者可以自由地利用設備硬件優勢、訪問位置信息、運行后臺服務、設置鬧鐘、向狀態欄添加通知等等,很多很多。 開發者可以完全使用核心應用程序所使用的框架APIs。應用程序的體系結構旨在簡化組件的重用,任何應用程序都能發布他的功能且任何其他應用程序可以使用這些功能(需要服從框架執行的安全限制)。這一機制允許用戶替換組件。 所有的應用程序其實是一組服務和系統,包括: 視圖(View)--豐富的、可擴展的視圖集合,可用于構建一個應用程序。包括包括列表、網格、文本框、按鈕,甚至是內嵌的網頁瀏覽器 內容提供者(Content Providers)--使應用程序能訪問其他應用程序(如通訊錄)的數據,或共享自己的數據 資源管理器(Resource Manager)--提供訪問非代碼資源,如本地化字符串、圖形和布局文件 通知管理器(Notification Manager)--使所有的應用程序能夠在狀態欄顯示自定義警告 活動管理器(Activity Manager)--管理應用程序生命周期,提供通用的導航回退功能
5、Applications
Android裝配一個核心應用程序集合,包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、聯系人和其他設置。所有應用程序都是用Java編程語言寫的。更加豐富的應用程序有待我們去開發! 從上面我們知道Android的架構是分層的,非常清晰,分工很明確。Android本身是一套軟件堆迭(Software Stack),或稱為「軟件迭層架構」,迭層主要分成三層:操作系統、中間件、應用程序。從上面我們也看到了開源的力量,一個個熟悉的開源軟件在這里貢獻了自己的一份力量。
三種方式進行定位,獲取用戶位置,分別是基于基站定位, 網絡定位,GPS定位。
1.基站定位(passive):這是基于網絡基站進行定位的,定位的精確度在幾十米到幾千米不等,在城市中基站覆蓋率比較高,推薦使用基站定位,如果是在郊區,基站相距較遠,基站的覆蓋沒有城里好,定位的誤差比較大。如果在郊區不推薦使用基站定位。
2.網絡定位:wifi定位,網絡定位
3.GPS定位:與衛星進行通信。手機中嵌入了GPS模塊(精簡版的A-GPS),通過A-GPS搜索衛星, 獲取經緯度。使用GPS的弊端是:必須站在空曠的地方,頭頂對著天空,如果云層厚了,也會受到一定的影響。精確度:10-50米
擴展知識:
使用Android是定位必備的權限:
uses-permission?android:name=?"?android.permission.ACCESS_FINE_LOCATION?"?/??????//精確定位
uses-permission?android:name=?"android.permission.ACCESS_MOCK_LOCATION"?/??????//模擬器
uses-permission?android:name=?"android.permission.ACCESS_COARSE_LOCATION"?/???//粗糙定位
//獲取定位管理對象
LocationManager??lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[]?names=lm.getAllProviders();//獲取所有的位置提供者,一般三種
Criteria??criteria=new?Criteria();//查詢條件,如果設置了海拔,則定位方式只能是GPS;
criteria.setCostAllowed(true);//是否產生開銷,比如流量費
String?provider=lm.getBaseProvider(criteria,true)//獲取最好的位置提供者,第二個參數為true,表示只獲取那些被打開的位置提供者
lm.requestLocationUpdates(provier,0,0,new?LocationListener(){});//獲取位置。第二個參數表示每隔多少時間返回一次數據,第三個參數表示被定位的物體移動每次多少米返回一次數據。
private?class?MyLocationListener?implements?LocationListener?{
@Override
public?void?onStatusChanged(String?provider,?int?status,?Bundle?extras)?{
}
@Override
public?void?onProviderEnabled(String?provider)?{
}
@Override
@Override
public?void?onLocationChanged(Location?location)?{
System.?out.println(?"服務中位置監聽發送了變化了"?);
float?accuracy?=?location.getAccuracy();?//?精確度
double?altitude?=?location.getAltitude();?//?海拔
double?latitude?=?location.getLatitude();?//?緯度
double?longitude?=?location.getLongitude();?//?經度
String?locationInfo?=?"jingdu:"?+?longitude?+?",weidu:"?+?latitude?+?",haiba:"?+?altitude?+?",jingquedu:"?+?accuracy;
Editor?edit?=?sp.edit();
edit.putString(?"location",?locationInfo);
edit.commit();
}
}???public?void?onProviderDisabled(String?provider)?{
}
1. 如果選中erase sd card, 則startService(ExternalStorageFormatter)
2. 如果沒有則直接發送廣播,sendbroadcast(android.intent.action.MASTER_CLEAR), 對應的在MasterClearReceiver會接受此廣播,在onReceive()方法中會調用RecoverySystem.rebootWipeUserData()方法.
3. RecoverySystem.rebootWipeUserData()的流程如下:
3.1. 廣播intent “android.intent.action.MASTER_CLEAR_NOTIFICATION” 通知所有接收端處理相關行為.
3.2. 等待所有接收完成動作.
3.3. 寫入一個command file于/cache/recovery/command, 內容為” --wipe_data”
3.4. 重新開機進入recovery mode.
4.進入recovery mode之后,讀取/cache/recovery/command, 內容為” --wipe_data”
5.按照讀取的command,進行wipe data操作。
6.操作成功之后重新開機進去normal mode
您好,很高興能幫助您,
android是基于linux的,所以在ubuntu下是最好的。當然windows下面也是可以的。但是android的內核是基于linux的,并且通過終端進行各種操作,非常強大,也比cmd方便。我現在自己開發的環境是這樣的:
ubuntu系統,以前我是windows然后安裝了ubuntu的虛擬機。android大部分的開發都是中間層到頂層的應用開發,所以基本上是java開發。表配如下:
1。eclipse是開發java必備,也是android必備。(當然前提是先安裝JDK1.6)
2。android的SDK和ADT。這是android的開發必須的工具,adb、ddms、mksdcard、aapt,debug 必備
A。安裝完eclipse后,通過help=〉install new software 。。把ADT安裝好
B。然后window=preference設置好SDK的路徑即可
如果用到C開發的話,可以安裝一下啊CDT
現在可以通過AVD manager安裝一下你想在哪個下的api,比如:android2.3.4,就可以建一個2.3.4的emulator,把模擬器跑起來。通過adb ddms 等工具察看、開發了。為了方便,把adb的路徑加到環境變量里。
你的是我前進的動力,還有不懂的地方,請你繼續“追問”!
如你還有別的問題,可另外向我求助;答題不易,互相理解,互相幫助!
android的LED燈是通過通知來調用的,只是通知類的一個參數,具體大體實現方法如下:
final int ID_LED=19871103;
NotificationManager nm=(NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification();
notification.ledARGB = 0xFFFFFF; //這里是顏色,我們可以嘗試改變,理論上0xFF0000是紅色,0x00FF00是綠色
notification.ledOnMS = 100;
notification.ledOffMS = 100;
notification.flags = Notification.FLAG_SHOW_LIGHTS;
nm.notify(ID_LED, notification);
nm.cancel(ID_LED)。
直接打開AndroidManifest.xml文件,找到包含Android.intent.action.MAIN和android.intent.category.LAUNCHER對應的activity。
如下圖中第三行package為com.cola.ui,第七行主Activity為com.cola.ui.ColaBox(.ColaBox為Activity簡寫方式)。
[html] view plain copy
新聞標題:androidcsdn的簡單介紹
文章網址:http://vcdvsql.cn/article42/dsdeehc.html
成都網站建設公司_創新互聯,為您提供App設計、定制網站、靜態網站、網站導航、網站制作、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯