導航:首頁 > 操作系統 > androidoneapm

androidoneapm

發布時間:2023-09-28 19:20:17

android App性能優化之耗電優化

在移動設備中,電池的重要性不言而喻,沒有電什麼都幹不成。對於操作系統和設備開發商來說,去追求更長的待機時間,耗電優化一直沒有停止。而對於一款應用來說,並不能忽略耗電問題,特別是那些被歸為「電池殺手」的應用,最終的結果是被卸載。因此,應用開發者在實現需求的同時,需要盡量減少電量的消耗(本文針對Android App進行分析)。

App耗電的原因其實很多,這里我就講以下幾種優化方案,優化方案的反面就是他的原因了,幾種優化方案如下:

1.合理的使用wake_lock鎖,wake_lock鎖主要是相對系統的休眠(這里就是為了省電,才做休)而言的,意思就是我的程序給CPU加了這個鎖那系統就不會休眠了,這樣做的目的是為了全力配合我們程序的運行。有的情況如果不這么做就會出現一些問題,比如微信等及時通訊的心跳包會在熄屏不久後停止網路訪問等問題。所以微信裡面是有大量使用到了wake_lock鎖。

2.使用jobScheler2,集中處理一些網路請求,有些不用很及時的處理可以放在充電的時候處理,比如,圖片的處理,APP下載更新等等;

3.計算優化,避開浮點運算等。

4.數據在網路上傳輸時,盡量壓縮數據後再傳輸,建議用FlatBuffer序列化技術,這個比json效率高很多倍,不了解FlatBuffer,建議找資料學習一下。

App耗電分析所用到的工具

App耗電高說到底無非是因為代碼不合理造成的,其中存在的一些問題,我們通過調試也很難定位到。在這里,我給大家分享一款工具,那就是「友盟+u-apm」應用性能監控平台了,是為了幫助開發者監測app應用使用的。它可以實時監測到app性能方面的問題,定位到問題所在處,開發者可以針對問題進行解決並修復。

友盟還通過輕量級的集成接入即可擁有實時、可靠、全面的應用崩潰、ANR、自定義異常等捕獲能力,及卡頓、啟動分析等性能能力,支持多場景、多通道智能告警監控,幫助開發者高效還原異常、卡頓用戶的訪問路徑和業務現場,縮短故障排查時間。

另外,友盟還提供了雲真機測試能力,提供了海量Android、iOS真機,通過資源集中管理,合理調度分配,為開發者提供發版前測試、發現線上問題後復現等場景使用,助力開發者平衡成本與需求,提升研發效率。助力開發者從研發測試質量驗收到線上問題復現排查,保障應用品質,提升測試效率。在雲真機測試期間自動採集崩潰信息,提供詳盡的崩潰報告協助篩查,真正實現監控測試全流程深度打通。為移動開發者提供了靈活地測試操作界面,支持ADB調試、WEB遠程調試、掃碼、抓包、虛擬定位等測試功能,並提供了測試報告供開發者後續查看。

友盟作為一款監測工具,可以幫助各位開發者監測app性能問題,還可以減輕開發者的負擔和壓力,簡直就是開發者的「得力小幫手」!

② Android對linux內核有怎樣的改動

我們知道Android是一個開源系統,但是並不徹底,而且Android從多個方面對Linux內核進行了改動與增強,盡管一度和Linux基金會在內核方面鬧得不愉快,但是最終也達成了和解。下面將對此進行詳細介紹和分析。

1 、Goldfish

Android模擬器通過運行一個Goldfish的虛擬CPU.Goldfish來運行arm926t指令集(arm926t屬於armv5構架),並且模擬了輸入/輸出,比如鍵盤輸入和LCD 輸出。這個模擬器其實是在qemu之上開發的,輸入/輸出是基於libSDL的。既然Goldfish是被模擬器運行的虛擬CPU,那麼當Android在真實的硬體設備上運行時,我們就需要去掉它,因此,只有知道Google對Goldfish做了哪些具體改動之後才能正確地去掉。據統計,Android 內核對Goldfish的改動主要涉及44個文件,具體匯總如下。

說明 本書中在被改動的文件前面加了Chg標記,在新增的文件前面加了New標記。

1Chgarch/arm/Makefile添加CONFIG_ARCH_GOLDFISH

2Newarch/arm/configs/goldfish_defconfig默認配置文件

3Newarch/arm/mach-goldfish/Kconfig為Goldfish CPU添加Kernel配置文件

4Newarch/arm/mach-goldfish/Makefile添加board-goldfish.o

5Newarch/arm/mach-goldfish/Makefile.boot為Goldfish CPU進行啟動配置

6Newarch/arm/mach-goldfish/audio.c Audio的輸入/輸出

7Newarch/arm/mach-goldfish/board-goldfish.c中斷請求、輸入/輸出等

8Newarch/arm/mach-goldfish/pdev_bus.c設備匯流排

9Newarch/arm/mach-goldfish/pm.c電源管理

10Newarch/arm/mach-goldfish/switch.cSwitch控制

11Newarch/arm/mach-goldfish/timer.c獲取和設置時間

12Chgarch/arm/mm/Kconfig添加ARCH_GOLDFISH到支持列表

13Chgdrivers/char/Makefile添加goldfish_tty

14Newdrivers/char/goldfish_tty.cTTY驅動

15Chgdrivers/input/keyboard/Kconfig為Goldfish的鍵盤事件添加配置文件

16Chgdrivers/input/keyboard/Makefile添加goldfish_events事件

17Newdrivers/input/keyboard/goldfish_events.cGoldfish鍵盤驅動

18Chgdrivers/mmc/host/Kconfig添加Kernel配置選項Goldfish MMC卡

19Chgdrivers/mmc/host/Makefile添加Goldfish MMC卡驅動

20Newdrivers/mmc/host/goldfish.c多媒體驅動

21Chgdrivers/mtd/devices/Kconfig為Goldfish的NAND flash device添加Kernel配置選項

22Chgdrivers/mtd/devices/Makefile添加goldfish_nand

23Newdrivers/mtd/devices/goldfish_nand.cNAND flash驅動

24Newdrivers/mtd/devices/goldfish_nand_reg.hNAND flash驅動

25Chgdrivers/power/Kconfig為Goldfish的battery(電池)驅動添加kernel配置選項

26Chgdrivers/power/Makefile添加Goldfish電池

27Newdrivers/power/goldfish_battery.c能源和電池狀態驅動

28Chgdrivers/rtc/Kconfig為Goldfish的rtc(時鍾)驅動添加Kernel配置選項

29Chgdrivers/rtc/Makefile添加rtc-goldfish

30Newdrivers/rtc/rtc-goldfish.c實時時鍾驅動

31Chgdrivers/video/Kconfig添加Goldfish的framebuffer

32Chgdrivers/video/Makefile添加Goldfish的framebuffer

33Newdrivers/video/goldfishfb.cframebuffer驅動

34Newinclude/asm-arm/arch-goldfish/dma.h

35Newinclude/asm-arm/arch-goldfish/entry-macro.S

36Newinclude/asm-arm/arch-goldfish/hardware.h

37Newinclude/asm-arm/arch-goldfish/io.h

38Newinclude/asm-arm/arch-goldfish/irqs.h

39Newinclude/asm-arm/arch-goldfish/memory.h

40Newinclude/asm-arm/arch-goldfish/system.h

41Newinclude/asm-arm/arch-goldfish/timer.h

42Newinclude/asm-arm/arch-goldfish/timex.h

43Newinclude/asm-arm/arch-goldfish/uncompress.h

44Newinclude/asm-arm/arch-goldfish/vmalloc.h

2 、YAFFS2

不同於PC機(文件是存儲在硬碟上的),手機使用FLASH作為存儲介質。HTC的G1使用的是NANDFLASH這種存儲目前已經相當普及了,而且種類也頗多(如SLC、MLC等),存儲密度也越來越高(已經出現幾十GB大小的NANDFLASH),價格也越來越低。

YAFFS2是專門用在FLASH上的文件系統,YAFFS2是「Yet Another Flash File System,2nd edition」的縮寫。YAFFS2為Linux內核提供了一個高效訪問NANDFLASH的介面。但是NANDFLASH的支持並不包含在標準的2.6.25內核中,所以Google在其中添加了對NANDFLASH的支持。據統計,為了支持YAFFS2,Google一共改動和增加了以下35個文件:

1Chgfs/Kconfig添加YAFFS配置

2Chg fs/Makefile添加YAFFS

以下為新增的YAFFS2:

1Newfs/yaffs2/Kconfig18Newfs/yaffs2/yaffs_mtddif2.h

2Newfs/yaffs2/Makefile19Newfs/yaffs2/yaffs_nand.c

3Newfs/yaffs2/devextras.h20Newfs/yaffs2/yaffs_nand.h

4Newfs/yaffs2/moleconfig.h21Newfs/yaffs2/yaffs_nandemul2k.h

5Newfs/yaffs2/yaffs_checkptrw.c22Newfs/yaffs2/yaffs_packed1.c

6Newfs/yaffs2/yaffs_checkprtw.h23Newfs/yaffs2/yaffs_packed1.h

7Newfs/yaffs2/yaffs_ecc.c24Newfs/yaffs2/yaffs_packed2.c

8Newfs/yaffs2/yaffs_ecc.h25Newfs/yaffs2/yaffs_packed2.h

9Newfs/yaffs2/yaffs_fs.c26Newfs/yaffs2/yaffs_qsort.c

10Newfs/yaffs2/yaffs_getblockinfo.h27Newfs/yaffs2/yaffs_qsort.h

11Newfs/yaffs2/yaffs_guts.c28Newfs/yaffs2/yaffs_compat.c

12Newfs/yaffs2/yaffs_guts.h29Newfs/yaffs2/yaffs_compat.h

13Newfs/yaffs2/yaffs_mtdif.c30Newfs/yaffs2/yaffs_validitiy.c

14Newfs/yaffs2/yaffs_mtdif.h31Newfs/yaffs2/yaffs_validity.h

15Newfs/yaffs2/yaffs_mtddif1.c32Newfs/yaffs2/yaffsinterface.h

16Newfs/yaffs2/yaffs_mtddif1.h33Newfs/yaffs2/yportenv.h

17Newfs/yaffs2/yaffs_mtddif2.c

3、 藍牙

在藍牙通信協議棧里Google修改了10個文件。這些改動修復了一些與藍牙耳機相關的明顯的Bug,以及一些與藍牙調試和訪問控制相關的函數,具體如下所示。

1Chgdrivers/bluetooth/Kconfig添加HCI UART Debug

2Chgdrivers/bluetooth/hci_II.c如果HCI UART Debug定義在Kernel配置中,則添加BT_DBG()宏

3Chgnet/bluetooth/Kconfig添加配置選項L2CAP, HCI_CORE, HCI_SOCK,以及通用介面和語音

4Chgnet/bluetooth/af_bluetooth.c如果CONFIG_ANDROID_PARANOID_NETWORK被定義,則添加藍牙功能的安全檢查

5Chgnet/bluetooth/hci_event.c修正藍牙的加密Bug和增加語音的支持

6Chgnet/bluetooth/rfcomm/core.c修正Bug

7Chgnet/bluetooth/rfcomm/sock.c修復Bug

8Chgnet/bluetooth/sco.c禁用SCO鏈接

9Chginclude/net/bluetooth/hci_core.h禁用LMP_ESCO

10Chginclude/net/bluetooth/rfcomm.h在rfcomm_dlc中添加「out」參數

4 、調度器(Scheler)

Android內核還修改了與進程調度和時鍾相關的策略。只改動了5個文件,如下:

1Chgkernel/sched.c添加NORMALIZED_SLEEPER

2Chgkernel/sched_fair.c修改內核的調度方式

3Chgkernel/softirq.c修改為CPU調度

4Chgkernel/time/tick-sched.c修改為CPU調度

5Chginclude/linux/tick.h如果CONFIG_NO_HZ被定義,則添加tick_nohz_ update_ stopped_ sched_tick()

5、 Android新增的驅動

Android在Linux的基礎上新增了許多特有的驅動,如下所示。

1)IPC Binder 一種IPC(進程間通信)機制。它的進程能夠為其他進程提供服務通過標準的Linux系統調用API。IPC Binder的概念起源於一家名為Be.Inc的公司,在Google之前就已經被Palm軟體採用了。

2)Low Memory Killer 其實內核里已經有一個類似的功能,名稱為oom killer(out of memory killer)。當內存不夠的時候,該策略會試圖結束一個進程。

3)Ashmem 匿名共享內存。該功能使得進程間能夠共享大塊的內存。比如說,系統可以使用Ashmem保存一些圖標,多個應用程序可以訪問這個共享內存來獲取這些圖標。Ashmem為內核提供了一種回收這些使用完的共享內存塊的方法,如果某個進程試圖訪問這些已經被回收的內存塊,它將會得到錯誤的返回值,以便它重新進行內存塊分配和數據初始化。

4)RAM Console and Log Device 為了調試方便,Android添加了一個功能,使調試信息可以輸入到一個內存塊中。此外,Android還添加了一個獨立的日誌模塊,這樣用戶空間的進程就能夠讀寫日誌消息,以及調試列印信息等。

5)Android Debug Bridge 嵌入式設備的調試的確比較麻煩,為了便於調試,Google設計了這個調試工具,可以簡稱為ADB,使用USB作為連接方式,ADB可以看做是連接Android設備和PC機的一套協議。

除了這些主要的功能之外,Android還增加了諸如 real-time clock、switch、timed GPIO等功能,所有這些改動和增加包含在以下28個文件之中。

1Chgdrivers/Kconfig進入配置文件

2Chgdrivers/Makefile添加switch,驅動等

3Newdrivers/android/Kconfig添加BINDER_IPC、POWER、POWER_STAT、POWER_ ALARM、LOGGER、RAM_CONSOLE、TIMED_GPIO、PARANOID_NETWORK到配置中

4Newdrivers/android/Makefile添加binder.o、power.o、alarm.o、logger.o、ram_console.o、timed_gpio

5Newdrivers/android/alarm.c系統硬體時鍾和實時時鍾管理

6Newdrivers/android/binder.cIPC機制(Binder)

7Newdrivers/android/logger.cGoogle的日誌API

8Newdrivers/android/ram_console.cRAM控制台和日誌設備方便調試 [1]

9Newdrivers/android/timed_gpio.cGoogle的GPIO定時驅動

10Newdrivers/switch/Kconfig為GPIO添加配置選項

11Newdrivers/switch/Makefile引入GPIO驅動

12Newdrivers/switch/switch_class.c

13Newdrivers/switch/switch_gpio.c

14Chgdrivers/usb/gadget/Kconfig添加ADB配置選項

15Chgdrivers/usb/gadget/Makefile編譯ADB所需的配置選項

16Newdrivers/usb/gadget/android_adb.cADB驅動

17Newinclude/linux/android_aid.h添加AIDs、INET、networking

18Newinclude/linux/android_alarm.h時鍾功能設置

19Newinclude/linux/android_timed_gpio.hGPIO結構體

20Newinclude/linux/ashmem.hAndroid共享內存

21Newinclude/linux/binder.hBinder IPC API定義

22Newinclude/linux/logger.hLogger定義

23Newinclude/linux/switch.hGPIO switch介面

24Chgmm/Makefile添加ashmem.o

25Newmm/ashmem.c內存共享實現

26Chgdrivers/misc/Kconfig添加LOW_MEMORY_KILLER配置選項

27Chgdrivers/misc/Makefile添加lowmemorykiller.c

28Newdrivers/misc/lowmemorykiller.c當內存過低時,選擇並結束進程

6 、電源管理

電源管理(Power Management)對於移動設備來說相當重要,也是最為復雜和開發難度最高的一個功能。Google添加了一個新的電源管理系統,不包含原有的apm和dpm等。這項改動主要涉及以下5個文件:

1Newinclude/linux/android_power.h定義電源管理API

2Newdrivers/android/power.c電源管理API實現

3Chgdrivers/input/evdev.c修改Android電源處理方式

4Chgfs/inotify_user.c修改Android電源處理方式

5Chgkernel/power/process.c修改Android電源處理方式

7、 雜項
除了上述改動之外,還有一些小改動,如新增的額外調試功能、鍵盤背光控制、TCP 網路管理等,共涉及36個文件,詳見參考資料。

為了調試方便,Android 添加了一個功能,使得調試信息可以輸入到一個內存塊中。此外, Android 添加了一個獨立的日誌模塊,這樣用戶空間的進程能夠讀寫日誌消息,調試列印信息等。

③ 如何優化 Android Studio 啟動,編譯和運行速度

首先你要找到原因,其原因分為兩大塊:

一、硬體方面:電腦硬體配置不高,這個是決定性的,決定了Android Studio的啟動,編譯和運行速度只能在一定區間內提升;

二、軟體方面:下載的Android Studio版本與你的電腦不能完美兼容運行。

解決辦法:

一、首先看電腦配置如何:可參考Android Studio官網中文版的介紹,鏈接(網路不予許發,你看圖吧):

四、加入以學習Android Studio為目的組建的的論壇、貼吧等進行查閱相關辦法,推薦首先去官網查詢;

五、最後提一個小建議,最好安裝到系統盤外的剩餘空間最大的盤,而且桌面不要放太多文件,尤其是大文件,這些很占內存,開機啟動項也清理一下,這樣會快很多,因為你問題描述系統了,我無法提供某個具體方法,所以具體的軟體方面的提速需你自己查閱。

閱讀全文

與androidoneapm相關的資料

熱點內容
復盛製冷壓縮機 瀏覽:979
雲伺服器共享手機流量 瀏覽:833
星界邊境像素壓縮 瀏覽:454
演算法分析與設計二手 瀏覽:979
學編程如何配電腦 瀏覽:966
怎麼看特徵找卡密的加密方式 瀏覽:522
方舟非官方伺服器怎麼賺錢 瀏覽:514
明日之後伺服器無效是怎麼回事 瀏覽:270
蛋殼公寓app如何查水電表 瀏覽:718
ad20庫中的51單片機怎麼找 瀏覽:624
阿里雲伺服器有點卡嗎 瀏覽:215
蘋果7如何讓app後台運行 瀏覽:170
耐克app預售產品哪裡看 瀏覽:209
補全演算法一年級 瀏覽:131
evd數據調校軟體加密 瀏覽:442
app聽課與微信如何設置分屏 瀏覽:911
加密的excel怎麼撤銷 瀏覽:43
java動態數組初始化 瀏覽:978
編譯後程序塊過大不適合 瀏覽:675
李煜pdf 瀏覽:847