Bitmap bm = BitmapFactory.decodeResource(this.getResources(), R.drawable.splash)
BitmapDrawable bd = new BitmapDrawable(this.getResources(), bm)
mBtn.setBackgroundDrawable(bd)
来代替mBtn.setBackgroundResource(R.drawable.splash)。
销毁的时候使用:
BitmapDrawable bd = (BitmapDrawable)mBtn.getBackground()
mBtn.setBackgroundResource(0)//别忘了把背景设为null,避免onDraw刷新背景时候出现used a recycled bitmap错误
bd.setCallback(null)
bd.getBitmap().recycle()
2. 使用字节流,突破Android heap size的限制
从中不难发现,bitmap的存放位置根据Android版本的不同真的有所不同。好了,下面就是找出怎么把图片存放到native heap里就行了,BitmapFactory里就那么几个decode方法,很容易找到BitmapFactory .decodeStream就可以解决。下面贴一下代码:
BitmapFactory.Options options = new BitmapFactory.Options()
options.inPreferredConfig = Config.ARGB_8888
options.inPurgeable = true// 允许可清除
options.inInputShareable = true// 以上options的两个属性必须联合使用才会有效果
String sname = String.format( “xxx.png”, sTowerStyle, j, sDirction, i)
InputStream is = am.open(sname)
arrBmp[ iBmpIndex] = BitmapFactory .decodeStream(is, null, options)
ok搞定收工。
尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,
因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。
因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,
decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,
无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应,
使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源,
否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。
1.下载完整的cts测试工具包,方式有两种:a.在现有代码上编译,代码版本与目标机器版本一致
b.在Google官网下载:,Compatibility
Test Suite (CTS)即可。
2.下载media测试内容,还是上边的官网,在网页最下边:
CTS Media Files
These media files are required for the CTS media stress tests.
CTS Media 1.0
3.连接手机与电脑(至少一台手机)
4.测试前准备
android-cts/repository/testcases中的CtsDelegatingAccessibilityService.apk和CtsDeviceAdmin.apk
安装完成以上apk后,在手机端 *** 作:
a.设置->辅助程序->Delegating Accessibility Service,打开
b.设置->安全->设备管理器->CTS相关的两个选项都激活
c.打开USB调试模式
d.保持屏幕唤醒
e.允许模仿位置
f.切换至英文模式US。
5.进入cts控制台
执行android-cts/tools/cts-tradefed
dev@linux -dev:~/android/CTS/android-cts/tools$ ./cts-tradefed
09-0509:20:52 I/: Detectednew device c8090fe4
09-0509:20:52 I/: Detectednew device5348300e
Android CTS 4.2_r1
我现在连接着两台设备,都检测到了。
6.开始进行CTS测试
首先,在控制台中输入help看这个控制台都能干什么。
cts-tf >help
CTS-tradefed host version 4.2_r1
CTS-tradefed is the test harness for running the Android Compatibility
Suite, built on top of the tradefed framework.
Available commands and options
Host:
help: show this message
help all: show the complete tradefed help
exit: gracefully exit the cts console, waiting till all invocations are
complete
Run:
run cts --plan test_plan_name: run a test plan
run cts --package/-p: run a CTS test package
run cts --class/-c [--method/-m]: run a specific test class
and/ormethod
run cts --continue-session session_ID: run all not executed tests from a
previous CTS session
run cts [options] --serial/s device_ID: run CTS on specified device
run cts [options] --shards number_of_shards: shard a CTS run into given
number of independent chunks, to run on multiple devices inparallel
run cts --help/--help-all: get more help on running CTS
List:
l/list d/devices: list connected devices and their state
l/list packages: list CTS test packages
l/list p/plans: list CTS test plans
l/list i/invocations: list invocations aka CTS test runs currentlyin
progress
l/list c/commands: list commands: aka CTS test run commands currently in
the queue waiting to be allocated devices
l/list r/results: list CTS results currently present in the repository
Add:
add derivedplan --plan plane_name --session/-s session_id-r
[pass/fail/notExecuted/timeout]: derive a plan from the given session
Dump:
d/dump l/logs: dump the tradefed logsfor all running invocations
Options:
--disable-reboot: Do not reboot device after running some amount of
tests.
run cts --plan + 运行某个plan,查看当前支持的plan,运行l
p,实际上所有的plan存放在android-cts/repository/plans
run cts --package/-p 运行某一个测试包
run cts --class/-c [--method/-m] 运行某一个测试类或测试方法
run cts --continue-session session_ID 继续运行之前没有完成的CTS测试,要知道它的session_ID
run cts [options] --serial/s device_ID 在某个串号的设备上进行CTS测试,对应多个机器的时候,通过adb
devices能够查看当前连接的所有设备的串号
run cts [options] --shards number_of_shards 在多个设备上同时运行CTS测试,如run cts --plan
CTS --shards 2,在两个设备上同时运行
run cts --help/--help-all 展示更多帮助
查看列表:
查看行为是l/list,接不同的参数显示对应信息。
d/devices 当前连接的设备,效果同adb devices,不过信息更详细,还有设备电量信息
packages 当前CTS plan的所有测试包
p/plan 当前所支持的CTS plan有哪些
i/invocations 当前CTS的运行状态
c/commands 展示出用户输入过的命令
r/results 展示以往的测试结果
Session Pass Fail Not Executed Start time Plan name Device serial(s)
0 17720 239 12 2013.08.24_18.23.23 CTS c8090fe4
1 17907 64 0 2013.09.04_17.51.15 CTS FUSC85YLYPAMRC69
需要特别关注的几点注意事项:
首先,手机的功能一定要完整,WIFI BT 3G CAMERA等
手机要切换至英文语言
连接到可用WIFI
有SIM卡,并能够打电话发短信
对于屏幕密度,目前CTS中最高支持320,但实际上Google已经添加了对480,也就是1080p的支持
会检测Fingerprint,注意厂家名
要保证能够访问到
实战演戏:
连接两台手机后,进入cts控制台:
run cts --plan CTS --shards 2
两台手机上会同时跑起CTS测试,大概5小时候测试完成,生成测试报告,保存在results下。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)