編輯:Android開發實例
1.Android和 Android 內存管理基本介紹
Android 內核是基於Linux 2.6內核的(目前最新開發版本是2.6.31),它是一個強內核版本,除了修改部分 Bug 外,它提供了用於支持 Android 平台的設備驅動,其心驅動主要包括:
Android Binder ,基於OpenBinder框架的一個驅動,用於提供Android平台的進間通訊(IPC,inter-process communication)。 源代碼位於drivers/staging/Android/binder.c
Android 電源管理(PM) ,一個基於標准Linux電源管理系統的輕量級的Android源管理驅動,針對嵌入式設備做了很多優化。源代碼位於kernel/power/earlysuspend.
kernel/power/consoleearlysuspend.c kernel/power/fbearlysuspend.c
kernel/power/wakelock.c kernel/power/userwakelock.c
低內存管理器(Low Memory Killer) ,相對於Linux標准 OOM(Out Of Memory機制更加靈活,它可以根據需要殺死進程來釋放需要的內存。 源代碼位於drivers/staging/Android/lowmemorykiller.c
匿名共享內存(ashmem) ,為進程間提供大塊共享內存,同時為內核提供回收和理這個內存的機制。源代碼位於mm/ashmem.c
Android PMEM(Physical) ,PMEM 用於向用戶空間提供連續的物理內存區域,D和某些設備只能工作在連續的物理內存上。源代碼位於drivers/misc/pmem.c
Android Logger ,一個輕量級的日志設備,用於抓取Android 系統的各種日志。 代碼位於drivers/staging/Android/logger.c
Android Alarm ,提供了一個定時器用於把設備從睡眠狀態喚醒,同時它也提供了個即使在設備睡眠時也會運行的時鐘基准,源代碼位於drivers/rtc/alarm.c
USB Gadget 驅動 ,一個基於標准Linux USB gadget 驅動框架的設備驅動,Andro的USB驅動是基於gaeget框架的,源代碼位於drivers/usb/gadget/
Android Ram Console ,為了提供調試功能,Android允許將調試日志信息寫入一被稱為RAM Console的設備裡,它是一個基於RAM的Buffer。源代碼位於drivers/staging/Android/ram_console.c。
每個Android應用都運行在一個單獨的進程在它自己的Dalvik的實例,負責所有的Android運行時的內存和進程管理的責任,停止和死亡過程的必要的管理資源。
Dalvik 和Android運行時間在一個Linux內核,處理低層次的硬件交互,包括驅動程序和內存管理,其API提供下層的服務,功能,和硬件的訪問。
Dalvik虛擬機是基於寄存器的虛擬機的優化,以確保設備可以有效地運行多個實例。 它依賴於Linux內核線程和低級的內存管理。
2.Dalvik虛擬機
Android的關鍵要素之一是Dalvik虛擬機。 而不是使用傳統的Java虛擬機(VM)中,如Java ME(Java移動版),Android使用自己的定制設計,以確保有效地在單個設備上運行多個實例的虛擬機。
Dalvik虛擬機,使用Linux內核處理低級別的功能,包括安全,線程,進程和內存管理。
所有的Android硬件和系統服務的訪問的管理使用作為中間層的 Dalvik。 通過使用一個虛擬機,主機應用程序的執行,開發人員有一個抽象層,以確保他們從來沒有擔心一個特定的硬件實現。
Dalvik虛擬機執行的Dalvik可執行文件格式,優化,以確保最小的內存足跡。 改造Java語言編譯後的類的使用在SDK提供的工具創建.dex可執行文件。
3.理解應用優先級和過程狀態
下面的列表詳細介紹每一個如圖所示的應用程序狀態,並解釋如何取決於應用程序組件,包括它的狀態是:
活動進程的活動(前台)進程是那些目前與用戶交互的組件宿主應用程序。 這些都是Android是試圖保持響應回收資源的過程。 通常有極少數的這些過程,他們將只作為最後的手段殺害。
活動進程包括:
活動中的一個“活躍”狀態,也就是說,他們在前台和響應用戶事件。 您將探索在
更詳細的活動狀態,在本章後面。
活動,服務或廣播接收機,當前正在執行的onReceive事件處理程序。
服務正在執行一個緩動的onCreate,或OnDestroy事件處理程序。
可見進程可見,但處於非活動狀態的進程是那些主辦的“看得見”的活動。 顧名思義,可見活動是可見的,但他們不是在前台或響應用戶事件。 這發生在一個活動僅是部分遮蔽(非全屏或透明的活動)。 通常有很少的可見的進程,他們將只在極端情況下被殺害,讓活動的進程繼續。
啟動的服務進程的進程已經啟動的托管服務。 服務支持正在進行的處理,應繼續沒有明顯的界面。 因為服務不直接與用戶交互,他們收到一個稍微較低的優先級比可見光活動。 他們仍然被認為是前台進程,並不會被殺死,除非活動或可見的進程所需要的資源。
後台進程的進程舉辦活動是不可見的,並沒有任何被認為是後台進程已經啟動的服務。 一般將有大量的後台進程,Android將殺死最後一個看到的第一個死亡的圖案獲得前台進程的資源。
空流程提高了整體系統性能的Android經常在內存中保留的申請後,他們達成的結束其一生。 Android維護這個緩存的提高應用程序的啟動時間時,他們再次推出。 這些過程是柔tinely殺害。
4.How to use memory efficiently如何有效地使用內存
Android 的管理打開的應用程序是在後台運行,所以你不應該關閉這個。同時這意味著,關閉應用程序時,系統需要更多的內存。 然而,大多數Android 用戶不是很滿意,它的東西它是如何,因為有時留下太多的進程運行,從而導致在日常生活中表現呆滯。 我們可以利用先進的任務殺手/任務管理器和它的工作非常好。
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
Android SDK本身提供了一種默認創建菜單的機制。但通過這種機制創建的菜單雖然從功能上很完備,但在界面效果
從 Android 5.0 Lollipop 開始提供一套 API 來支持嵌入的滑動效果。同樣在最