1、格式化字符串
Android中格式化带参数的字符串,方法有如下两种:
(1)、使用xliff:g标签
例如,
字符串定义:
当前时间:%1$s
或者这样定义,
当前时间:%s
使用方法:
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$ms:代表输出的是字符串,n代表是第几个参数,设置m的值可以在输出之前放置空格
%n$md:代表输出的是整数,n代表是第几个参数,设置m的值可以在输出之前放置空格,也可以设为0m,在输出之前放置m个0
%n$mf:代表输出的是浮点数,n代表是第几个参数,设置m的值可以控制小数位数,如m=2.2时,输出格式为00.00
也可简单写成:
%d (表示整数)
%f (表示浮点数)
%s (表示字符串)
(2)、直接使用%n$符号。
例如,
字符串定义:
相关:%1$d %2$s %3$d/%4$d行
使用方法:
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 层都能够达到保护私有数据的作用 。