Android 攻城獅工作中的一些經驗總結-[Android_YangKe]

Android 中為什么盡可能的少用枚舉,你真的懂它嗎?

對于移動設備來說內存是十分有限的資源,為了減少 GC、減少卡頓,我們應盡量減少內存開銷,其中枚舉就是可以優化的地方之一。

枚舉是一種特殊的 class。

1> 創建 Animal.java。touch Animal.java
2> 編譯 Animal.java。javac Animal.java
3> 查看 Animal.java 在編譯器種的真實模樣。javap Animal.class

//Animal.java
public enum Animal {
    DOG, CAT
}
yangke.png

通過觀察枚舉經過編譯后會多出數組、 valueOf函數、靜態代碼塊等。如果我們將DOG、CAT直接用常量來表示內存占用量可想而知。


Android 的整個編譯打包過程
  • aapt 工具對 R.Java、Application Source Code、res 等文件進行編譯。

  • Java 編譯器將 *.java 文件編譯為 *.class 文件。此文件包括本項目及其它 module 及 lib。

  • dex 工具將 *.class 文件合并為 *.dex 文件。

  • apkbuilder 工具對 *.dex 文件、Android 資源文件進行合并最終得出 *.apk
    文件。

  • signed 對 *.apk 進行簽名得出簽名版可安裝 *.apk。

  • zipalign 對 apk 文件對齊優化。

zipalign對齊優化:通俗的說就是按著有利于系統處理的排列方式,對我們 apk 中的資源文件進行排列,提高資源的查找速度,從而去提高應用的運行效率。
zipalign 使用了4字節的邊界對齊方式來映射內存,通過空間換時間的方式提高執行效率。內存分配單位是32位的,即4字節。位圖中每行象素的數據是連續的,而下一行不能和上一行共用一個內存單元(4字節),所以每行象素的數據長度必須是4字節的倍數。


Android 應用如何定位卡頓、掉幀原因

造成應用卡頓的情況無非兩種:

  • CPU、GPU 的性能有限,無法在規定的時間協同完成大量 UI 繪制。
  • 可用內存過小導致頻繁 GC,從而導致繪制卡頓(代碼low)。

由于硬件問題,我們不太好控制,這里我們主要針對軟件問題進行分析。
1> 手機開發者模式中打開調試 GPU 過度繪制,查看同一個區域 View 是否存在多次繪制。紫色代表過度繪制一次、綠色代表過度繪制兩次、淺紅色代表過度繪制三次、深紅色代表過度繪制大于等于四次。

2> 借助開發工具打開 Android Device Monitor->Hierarchy View 查看 View 的布局是否合理。

3> TraceView 是 Android SDK 中內置的一個工具,它可以加載 trace 文件,用圖形的形式展示代碼的執行時間、次數及調用棧,便于我們分析。


多個設備連接 adb 時,如何使用 install 命令

1> adb devices 列出當前所有連接設備,例:emulator-5554、emulator-5553...
2> adb -s emulator-5554 install apk 路徑安裝 apk 文件到 emulator-5553 設備


Android Studio 調試出現 waiting for debugger 的解決辦法

1> Studio 連接設備過多,關閉掉其他設備,只保留當前正在使用的設備。
2> 終端調用adb kill-server隨后調用adb start-server。當然前提需要在終端配置好adb環境變量。adb路徑:盤符/xxx路徑/Android/sdk/platform-tools/


View 背景溫故

color 標準表示是8位的16進制表示的,而我之前一直用的都是6位。 顏色的十六進制可寫為#xxxxxxxx(8位)和#xxxxxx(六位) 六位數的就是特殊的八位數的十六進制顏色。
劃分為#|xx|xxxxxx。 則|xx|內的 xx 代表顏色的透明度。00 為全透明,而 ff 為完全不透明,xxxxxx相當于#ffxxxxxx。 顏色和不透明度 (alpha) 值以十六進制表示法表示。任何一種顏色的值范圍都是 0 到 255(00 到 ff)。對于 alpha,00 表示完全透明,ff 表示完全不透明。表達式順序是“aabbggrr”,其中“aa=alpha”(00 到 ff);“bb=blue”(00 到 ff);“gg=green”(00 到 ff);“rr=red”(00 到 ff)。

View 按下顏色一般為背景顏色透明度60%左右。


Bitmap 是什么?

Bitmap (位圖)一種以像素點填充的圖片格式,擁有很高的圖像色彩,常見形式一個像素點占用4字節、8字節內存。此特點同時帶來一個問題位圖內存占用過高。

下面我們看一下 Bitmap 的內存計算公式:圖片寬像素點和×圖片高像素點和×每個像素點占用的字節大小 = 圖片占用總內存。

例:一張格式為1080×1920的圖片,如果此圖的圖片質量為 ARGB_8888 標識此位圖一個像素點占用 4 byte,那么我們看下此圖片大概占用多少內存。
1080×1920×4÷1024 = 8100byte ≈ 8mb。
計算完 Bitmap 的內存占用是不是頭冒冷汗?那么我們如何優化呢?主流的現在分為兩種:
1> 尺寸壓縮(100×100的圖片尺寸改為50×50)。
2> 圖片質量壓縮(降低圖片的清晰度)。
3> 項目中優先使用 xml 編寫的 Shape 圖形、.9 圖片、普通圖片等。
具體如何壓縮小伙伴們自行百度嘍。


什么是 px、dp、sp、dpi、ppi

px:像素點。展示圖像信息的最小顯示單元。
dp:Android 中推出的一種用于適配不同密度手機的尺寸單位。其中有一個基數,當dpi=160時1dp=1px,基數越大1dp對應的px越大。
sp:Android 中推出的一種可拉伸字號尺寸單位。sp 作為字體大小單位,會隨著 Android 系統的字體大小改變,而 dp 作為單位則不會。
dpi:dot per inch 的縮寫,指每英寸所包含的點。dpi 是一個與硬件相關的概念。例:打印機,此處的點是指每英寸所能掃描的點或打印的點。
ppi:pixels per inch 的縮寫,指每英寸所包含的像素點。ppi 越大標識每英寸屏幕所包含的像素點越多,圖片也就越清晰。

一個dp、px 在線換算網站:https://pixplicity.com/dp-px-converter


App 被系統回收所遇到的問題

Activity 之間使用 intent 傳遞值如不進行狀態保存,應用異常問題:
1> a頁面跳轉b頁面使用 intent 傳遞值:例:當應用停留在a頁面,由于用戶操作我們的應用由前臺進程轉為后臺進程,一定時間后應用被系統回收,當用戶再次打開我們應用做跳轉操作。如a頁面 intent 中使用的值不進行狀態保存,b頁面調用 getIntent().getExtras().getXXX 得到的值會是 null(造成空指針異常)


百度地圖獲取 SHA1

開發版SHA1:
1> cd .android
2> keytool -list -v -keystore debug.keystore
3> 輸入秘鑰口令android回車

正式版SHA1:
1> keytool -list -v -keystore正式版簽名文件路徑,文件名為*.jks
2> 輸入簽名文件密碼回車密碼就是正式版apk包簽名文件,密碼同簽名文件密碼,文件為*.jks


Mac 很常用的一個命令
  • du -sh * - 列出當前目錄下所有文件大小

Linux 文件解壓
  • tar –xvzf *.tar.gz 解壓 *.tar.gz 文件 *.tar.gz 為文件名

Linux 終端中需要掌握的一些快捷鍵
  • CTRL + U - 剪切光標前的內容
  • CTRL + K - 剪切光標至行末的內容
  • CTRL + Y - 粘貼
  • CTRL + E - 移動光標到行末
  • CTRL + A - 移動光標到行首
  • ALT + F - 跳向下一個空格
  • ALT + B - 跳回上一個空格
  • ALT + Backspace - 刪除前一個單詞
  • CTRL + W - 剪切光標后一個單詞
  • Shift + Insert - 向終端內粘貼文本
  • dpkg -i - xxx/xxx/xxx.deb 安裝deb軟件, 有時權限不夠dpkg前應加sudo
  • dpkg -P - 卸載deb軟件, 權限不夠同上

Linux 制作快捷方式

1> 創建xxx.desktop文件
2> 按需將下面內容拷貝到xxx.desktop文件內保存退出

[Desktop Entry]
Name=xxx //應用名稱
Comment=Rayn-IDEA-IU
Exec=/home/rayn/idea/bin/idea.sh //應用的可執行文件,一般位于bin目錄
Icon=/home/rayn/idea/bin/idea.png//啟動應用的圖標
Terminal=false//是否開啟終端
Type=Application//標識應用程序

3.右鍵此文件-->屬性-->權限, 勾選允許文件為程序執行


Ubuntu 安裝有道詞典

1> 下載適合自己操作系統的軟件版本(文件以deb結尾) http://cidian.youdao.com/index-linux.html
2> 安裝軟件 sudo dpkg -i xxx.deb
3> 啟動軟件youdao-dict
如果Ubuntu是14版本可略過步驟4
4> 修復Ubuntu16無法啟動的問題

  • sudo apt-get -f install
  • sudo apt-get install tesseract-ocr

5> 啟動軟件 youdao-dict


Ubuntu 如何安裝 flash 插件

1> sudo apt-get update
2> sudo apt-get install flashplugin-installer
3> 瀏覽器刷新頁面


Qt 無法輸入中文問題

1> sudo apt install fcitx-frontend-qt5
2> sudo cp /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so /opt/Qt5.7.0/Tools/QtCreator/lib/Qt/plugins/platforminputcontexts/

當然以上需要找到自己對應的目錄才可以順利進行
3> 重啟 Qt


此篇由于是工作中問題的一些積累,所以會比較雜,高抬貴手別罵!

喜歡有幫助的話: 雙擊、評論、轉發,動一動你的小手讓更多的人知道!關注 Android_YangKe

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容