在Android中采用网页的方式进行视频数据展现和播放时,发现CPU总是居高不下,在70%—80%之间徘徊,所以通过以下方式来查看和定位:
1、adb shell: top -m 5 -s cpu 和 top -m 10 -t
2、DDMS:Heap、Threads、Allocation Tracker、System Information
均未发现有价值信息,再看看WebViewCoreThread、MediaServer占用的CPU、内存也并不高,所以进行如下隔离测试:
1、单独的APK视频播放 正常
2、单独的HTML+视频播放 正常
3、载入视频页面+播放视频 异常
4、载入视频页面+不播放视频 异常
看来都没有关系,最后发现光标从滚动字幕上离开时,CPU逐渐恢复正常……,总结一下:单独用marquee本身,影响不是很大,主要在于页面如果有其他的脚本事务,如光标系统、视频播放等往往会因为滚动效果的叠加CPU占用情况会放大。还有个更为重要的一点,应该算是Android的一个BUG:如果manifest中不配置android:targetSdkVersion="15"
类的属性,一切正常如果配置了则CPU提升很明显。除此之外:
1、在WebView中尽可能不要使用GIFs、Marquee、Blink等动画和渲染效果
Marquee不要用,有四个以上页面会好卡,如果的确需要使用可以用程序写,JQUERY中应该有现成的。
2、Gif可以用但不要太多,页面加载状态的控制可以用一下,其他的不要考虑,
当然GIF不显示出来,也不会占用CPU。
此外,如果WebView从前台切换到后台,记得及时暂停或释放资源,可参考以下方式来降低性能开销:
http://www.ilovn.com/topic/android-developers-use-webview-program-into-the-background-is-still-occupied-by-the-cpu-solution/
http://stackoverflow.com/questions/11447057/my-app-consume-high-cpu
附上一些相关参考资料:
1、以上几类应用的性能参考
http://osdir.com/ml/AndroidDevelopers/2009-01/msg00601.html
2、WebViewCoreThread problem
http://www.anddev.org/other-coding-problems-f5/webviewcorethread-problem-t10234.html
2、WebView的一些优化
http://stackoverflow.com/questions/4081250/android-webview-performance
3、硬件加速:http://blog.csdn.net/think_soft/article/details/7672151
http://blog.csdn.net/qq295445028/article/details/8244575
4、WebView内存泄漏:http://blog.csdn.net/l_serein/article/details/9007479
5、Android TextView -跑马灯CPU负载:http://www.91r.net/ask/19163148.html
针对WebView中加载页面的优化,同样请参考我前面的博文:
http://blog.csdn.net/webwalker/article/details/6563519