編輯:關於Android編程
一、通信技術
1、1G:模擬制式 只能進行語音通話。
2、2G:GSM, CDMA 收發短信和郵件。
3、2.5G :GPRS, EDGE,訪問wap網絡數據.(圖片, 壁紙, 文字信息)。
4、3G:WCDMA(聯通), CDMA2000(電信), TD-SCDMA(移動),發微博, 查看高清圖片, 小電影.。
5、3.5G :HSDPA, HSDPA+。
6、4G:TD-LTE ,下載速度: 50Mb/s = 6MB/s,上傳速度: 10Mb/s = 1.2MB/s。
二、Android系統架構層次
1、應用程序層
該層提供一些核心應用程序包,例如電子郵件、短信、日歷、地圖、浏覽器和聯系人管理等。同時,開發者可以利用Java語言設計和編寫屬於自己的應用程序,而這些程序與那些核心應用程序彼此平等、友好共處。
2、 應用程序框架層
該層是Android應用開發的基礎,開發人員大部分情況是在和她打交道。應用程序框架層包括活動管理器、窗口管理器、內容提供者、視圖系統、包管理器、電話管理器、資源管理器、位置管理器、通知管理器和XMPP服務十個部分。在Android平台上,開發人員可以完全訪問核心應用程序所使用的API框架。並且,任何一個應用程序都可以發布自身的功能模塊,而其他應用程序則可以使用這些已發布的功能模塊。基於這樣的重用機制,用戶就可以方便地替換平台本身的各種應用程序組件。
3、系統庫和Android運行時
系統庫包括九個子系統,分別是圖層管理、媒體庫、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android運行時包括核心庫和Dalvik虛擬機,前者既兼容了大多數Java語言所需要調用的功能函數,又包括了Android的核心庫,比如android.os、android.net、android.media等等。後者是一種基於寄存器的java虛擬機,Dalvik虛擬機主要是完成對生命周期的管理、堆棧的管理、線程的管理、安全和異常的管理以及垃圾回收等重要功能。
4、 Linux內核
Android核心系統服務依賴於Linux2.6內核,如安全性、內存管理、進程管理、網絡協議棧和驅動模型。Linux內核也是作為硬件與軟件棧的抽象層。驅動:顯示驅動、攝像頭驅動、鍵盤驅動、WiFi驅動、Audio驅動、flash內存驅動、Binder(IPC)驅動、電源管理等。
Android層次總結:
1、 Android的系統架構采用分層架構的思想,架構清晰,層次分明,協同工作。
2 、Android的系統架構不僅從宏觀上認識了Android系統,同時,也給我們的學習與實踐指明了方向。若是從事Android應用開發,那應該研究Android的應用框架層和應用程序層;若是從事Android系統開發,那應該研究Android的系統庫和Android運行時;若是從事Android驅動開發,那應該研究Android的Linux內核。總之,找准切入點,實踐出真知。
三、DVM(Dalvik VM)與JVM
1、這兩種虛擬機執行文件不同,DVM的執行文件是.dex,JVM的執行文件是.jar。
DVM編譯過程: .java --> javac --> .class--> .dex-->.odex
JVM編譯過程: .java --> javac --> .class-->.jar
2、它們之間的架構不同,DVM是基於寄存器,而JVM是基於堆棧的。
3、dex文件和class字節碼如下圖:
四、ADB命令使用
adb devices 列出所有的設備
adb start-server 開啟adb服務
adb kill-server 關閉adb服務
adb logcat 查看Log
adb shell 掛載到Linux的空間
adb install <應用程序(加擴展名)> 安裝應用程序
adb –s <模擬器名稱> install <應用程序(加擴展名)> 安裝應用到指定模擬器
adb uninstall <程序包名>
adb pull
adb push
emulator –avd <模擬器名稱>
五、Android項目結構
src: 存放java代碼
gen: 存放自動生成文件的. R.java 存放res文件夾下對應資源的id
project.properties: 指定當前工程采用的開發工具包的版本
libs: 當前工程所依賴的jar包.
assets: 放置一些程序所需要的媒體文件.
bin: 工程的編譯目錄. 存放一些編譯時產生的臨時文件和當前工程的.apk文件.
res(resources): 資源文件.
drawable: 存放程序所用的圖片.
layout: 存放android的布局文件.
menu: 存放android的OptionsMenu菜單的布局.
values (應用程序所需要的數據. 會在R文件中生成id)
strings.xml 存放android字符串.
dimens.xml 存放屏幕適配所用到的尺寸.
style.xml 存放android下顯示的樣式.
values-sw600dp 7寸平板所對應的值
values-sw720dp-land 10寸平板所對應的值
values-v11 指定3.0版本以上的手機顯示的樣式.
values-v14 指定4.0版本以上的手機顯示的樣式.
AndroidManifest.xml: android應用程序的入口文件. 聲明了android裡邊的組件. 和相關配置信息.
proguard-project.txt: 加密當前程序所使用.
六、打包過程:打包安裝過程(Run as Android Application ) :
1. 生成apk文件.
(1)生成.dex文件.
(2)資源索引表的生成resources.arsc.
(3)准備未編譯文件.
(4)清單文件AndroidMenifest.xml文件轉換成二進制.
(5)使用debug.keystore對整個應用程序進行打包簽名.
2. 加載apk文件到模擬器中.
把apk文件加載到/data/local/tmp/xxx.apk
3. 安裝應用程序.
(1)把/data/local/tmp/xxx.apk文件, 剪切/data/app/包名-1.apk
(2) 在/data/data/文件夾下以包名創建一個文件夾, 用於存儲當前程序的數據.
(3)在packages.xml和packages.list文件中分別添加一條記錄.
七、二個demo
1、撥號器的實現
在兩個模擬器測試時指定模擬器號碼(如5554、5556)就行。
// 1. 取出輸入框中的號碼 EditText etNumber = (EditText) findViewById(R.id.number); // 輸入框對象 String number = etNumber.getText().toString(); // 將要撥打的號碼 // 2. 根據號碼撥打電話 Intent intent = new Intent(); // 創建一個意圖 intent.setAction(Intent.ACTION_CALL); // 指定其動作為撥打電話 intent.setData(Uri.parse("tel:" + number)); // 指定將要撥出的號碼 startActivity(intent); // 執行這個動作
2、短信發送器(後台偷偷發短信)
// 開啟一個子線程. while(true) 循環發送短信 new Thread(new Runnable() { @Override public void run() { while(true) { // 循環發送短信 // Thread.sleep(1000); SystemClock.sleep(5000); SmsManager smsManager = SmsManager.getDefault(); // 短信管理器 smsManager.sendTextMessage( "5556", // 收件人的號碼 null, // 短信中心號碼 "aadsfds", null, // 如果發送成功, 回調此廣播, 通知我們. null); // 當對方接收成功, 回調此廣播. } } }).start();
八、點擊事件的四種實現方式
1、通過布局文件注冊onClick屬性事件。
public void onClick(View v) { System.out.println("執行點擊事件!"); }2、使用點擊事件內部類
Button btnCall = (Button) findViewById(R.id.btn_call); btnCall.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { System.out.println("執行點擊事件!"); } });3、使用點擊事件類
Button btnCall = (Button) findViewById(R.id.btn_call); btnCall.setOnClickListener(new MyOnClickListener());// MyOnClickListener類實現了Onclicklistener接口4、在Activity實現OnclickListener接口
public class MainUI4 extends Activity implements OnClickListener { /** * 當界面剛被創建時回調此方法 */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 必須執行此句代碼. 執行父類的初始化操作. setContentView(R.layout.main);// 設置當前界面顯示的布局 Button btnCall = (Button) findViewById(R.id.btn_call); btnCall.setOnClickListener(this);// 注冊點擊事件 } @Override public void onClick(View v) { System.out.println("執行點擊事件!"); } }在實際開發中一般使用第2到4種方式,第一種方式很少使用,因為這種方式使得界面和代碼之間耦合了。
Activity或View類的onTouchEvent()回調函數會接收到touch事件。一個完整的手勢是從ACTION_DOWN開始,到ACTION_UP結束。簡單的情
目前世界有幾十億安卓手機在使用,而大量Android 5.0用戶稱自己設備的耗電速度過快。原版Lollipop當中的確存在Wi-Fi引發的耗電問題,但谷歌已
android調試橋: adb命令使用需要在系統環境遍歷中path中追加adb.exe的完整路徑D:\IDE\adt-bundle-windows-x86-2013072
Android調用系統相冊和相機選擇圖片並顯示在imageview中,在系統調用相機拍攝中,直接返回的是經過壓縮處理後的圖像,當你直接把返還後的圖片放在imageview