1、格式化字符串
Android中格式化帶參數的字符串,方法有如下兩種:
(1)、使用xliff:g標籤
例如,
字符串定義:
<string name="str_cur_time">當前時間:<xliff:g id="NAME">%1$s</xliff:g></string>
或者這樣定義,
<string name="str_cur_time">當前時間:<xliff:g id="NAME">%s</xliff:g></string>
使用方法:
private String strFmtDate;
private SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
strFmtDate = this.getResources().getString(R.string.str_cur_time);
String strDate = String.format(strFmtDate, fmt.format(new Date(System.currentTimeMillis())));
Android源碼中大量使用了此種方式,XLIFF外文全名是XML Localization Interchange File Format,中文名是XML本地化數據交換格式。
標籤:
屬性id可隨意命名,表示當前xliff結點的唯一標識。
屬性值舉例說明
%n
%n$mf:代表輸出的是浮點數,n代表是第幾個參數,設置m的值可以控制小數位數,如m=2.2時,輸出格式爲00.00
也可簡單寫成:
%d (表示整數)
%f (表示浮點數)
%s (表示字符串)
(2)、直接使用%n$符號。
例如,
字符串定義:
相關:%1
使用方法:
int totalItem = 100;
int curLine = 1;
int Totalline = 20;
String lineNumber = String.format(context.getString(R.string.str_linenumber_show), totalItem, " ", curLine, Totalline);
lineNumber 顯示這樣一個結果,
“相關:100 1/20”
2、一點常識
手機在未root的情況下,某個應用程序如果有讀寫外置存儲卡的權限,它可以對外置存儲卡進行操作,除了這個目錄外,它還有兩個地方用來存放文件,一個是/data/data/包名目錄,另一個是/data/local/tmp目錄。
3、常用的adb指令
(1)、顯示當前運行的全部設備或者模擬器
adb devices
(2)、連接遠程設備,可以通過wifi連接,調試程序,在盒子開發中用的比較多
adb connect 192.168.xx.xxx
(3)、安裝應用程序,-r表示如果原來安裝有此應用,那就重新進行安裝,如果原來沒有此應用,可以不用-r參數
adb install -r 應用程序.apk
(4)、卸載應用
adb uninstall [packagename]
(5)、獲取當前設備中的某個文件,例如獲取/mnt/sdcard目錄下的log.txt文件,放到e盤的file目錄下
adb pull /mnt/sdcard/log.txt e:\file
(6)、向當前設備中寫入某個文件。例如將電腦下的e:\file\test.so文件寫入/mnt/sdcard目錄
adb push e:\file\test.so /mnt/sdcard/test.so
(7)、查看adb命令幫助信息
adb help
(8)、在命令行中過濾LOG信息。
adb logcat -s 標籤名
(9)、卸載系統應用
adb shell
su
mount -o remount /system
rm -fr /system/app/xxx.apk
reboot
(10)、輸出log到文件,當在控制檯打印log不方便或者太多時,可以直接輸出到指定的文件。
adb logcat -v time -f /mnt/sdcard/log.txt
(11)、截屏操作,例如截取當前屏幕存放到/mnt/sdcard/tmp.png中。注意需要手機root。
adb shell screencap –p /mnt/sdcard/tmp.png
這個命令對於開發和測試人員非常有用,有時候想快速截取手機屏幕,就可以利用這個命令命令。但是前提手機上得有screencap 這個二級制可執行程序,有的手機上的這個程序被砍掉了。
(12)、錄屏操作。注意需要手機root。
$adb shell screenrecord /mnt/sdcard/test.mp4
這個命令其實和截屏相似,只不過這個是錄製視屏,對於測試人員來說更是重要了,有時候想復現問題步驟,那麼就可以採用這個命令進行錄屏功能。
(13)、查看設備的進程信息,或者是指定進程的線程信息
adb shell
ps | grep 過濾內容
例如,
ps |grep cn.test.demo,只顯示應用cn.test.demo對應的信息。
或者可以這樣用,
ps –t [pid] 查看pid對應的線程信息
例如,
ps –t 11798,顯示進程號11798對應的進程信息。
(14)、查看當前應用的activity信息
adb shell dumpsys activity top
可以查看當前應用的activity信息
(15)、查看指定包名應用的詳細信息
adb shell dumpsys package
(16)、查看指定進程名或者是進程id的內存信息
adb shell dumpsys meminfo
(17)、查看指定包名應用的數據庫存儲信息(包括存儲的sql語句)
adb shell dumpsys dbinfo
(18)、刪除文件夾下一個或多個文件的命令 。
rm -r 完整文件名(帶後綴)
例如 rm -r xx.mp3
rm -r . 刪除這個目錄下所有的文件
rm -r 關鍵字 刪除和關鍵字有關的所有文件
例如:刪除SDCARD 文件夾下的所有mp3文件
cd sdcard
rm -r *.mp3
(19)、top命令
這個查看cpu信息太方便了。
adb shell
top -m 5 -t
其中按cpu大小列出5個進程列表。
例如,com.xxx.test的cpu使用過高,它會導致手機發燙。同時利用這個信息,可以監控應用cpu的使用,以調整優化代碼。
4、重點說一下dumpsys命令
dumpsyss命令用來查看系統信息,在開發中用的非常多。
命令格式如下所示,
dumpsys [options]
meminfo 顯示內存信息
cpuinfo 顯示CPU信息
account 顯示accounts信息
activity 顯示所有的activities的信息
window 顯示鍵盤,窗口和它們的關係
wifi 顯示wifi信息
例如,查看應用com.tianxia.test的內存使用情況
adb shell dumpsys meminfo com.tianxia.test
5、小技巧–匿名類
儘量少使用匿名類,因爲匿名類相對於正常類會多站用1K的空間,所以儘量少使用匿名類。
6、小技巧–反斜槓字符
在字符串定義文件String.xml中,反斜槓字符()可以單獨作爲一行,用來實現連接下一行的內容,
7、關於Android菜單
Android支持兩種類型的菜單:一種是用戶按下Menu按鈕時彈出的菜單;另一種是用戶用手指按住屏幕不放是彈出的上下文菜單。
8、關於HandlerThread
HandlerThread繼承於Thread,本質是一個線程,主要的作用也是建立了一個線程,並且創立了消息隊列,有自己的looper,可以讓用戶在這個線程中分發和處理消息。我們知道Android的消息處理通過handler和looper來實現,而HandlerThread不但能提供異步消息處理,Handler處理消息的方法也會在這個線程中執行,他最主要的作用就是提供了一個線程。
9、Android NDK注意事項
在Android NDK中,一個wchar_t是4個字節,也就是說Android NDK下,unicode字符是採用ucs4的,而在windows系統下,unicode是採用ucs2,即每個unicode字符是佔用兩個字節的,可以用sizeof()函數來測試驗證一下。如果在Android NDK下,想要強制指定一個wchar_t是2個字節,即跟windows系統下一樣,採用ucs2,需要在Android.mk中添加一句LOCAL_CFLAGS := -fshort-wchar即可。但是如果指定wchar_t爲兩個字節的話,則所有用於處理unicode字符串的函數(如wcscpy,wcslen,wcscmp,wcscat)則都不再適用,需要你自己重新寫這些函數。
10、關於uid、gid的一些知識
Android 的權限分離的基礎是建立在 Linux 已有的 uid、gid 基礎上的 。
uid – Android 在 安裝一個應用程序時,系統就會自動爲它分配一個 uid 。其中普通 Android 應用程序的 uid 是從 10000 開始分配,10000 以下是系統進程的 uid 。
gid – 對於普通應用程序來說,gid 等於uid 。由於每個應用程序的 uid 和 gid 都不相同, 因此不管是 native 層還是 java 層都能夠達到保護私有數據的作用 。
歡迎您掃一掃上面的微信公衆號,訂閱我的個人公衆號! 本公衆號將以推送Android各種碎片化小知識或小技巧,以及整理Android面試知識點爲主,也會不定期將開發老司機日常工作中踩過的坑,平時自學的一些知識總結出來進行分享。每天一點乾貨小知識把你的碎片時間充分利用起來。