啰嗦一堆

最近接触到相机功能,需要拿到相机的预览数据做后续处理,刚开始使用没发现什么大问题,后来才发现midiaserver居然占了我25%的CPU,这还得了,于是赶紧百度。。。卧槽,,,,没有,谷歌呢。。。。还是没有,基本上都是拿源码来说一大堆,表示我这个水平的人还没有达到那种高度,没办法只能自己调了,,,

经过我的测试发现,该服务的占用率主要由两个地方引起:

1.分辨率

myParam.setPictureSize(pictureSize.width, pictureSize.height);

// 设置预浏尺寸

myParam.setPreviewSize(previewSize.width, previewSize.height);

通过我测试时发现,meaiaServer占用率高主要原因是由分辨率引起的,在使用之前,最好是先获取一下自己手机的屏幕分辨率,然后适当的调整,计算出摄像头支持的最优分辨率。我当时的测试机是1280*800但是,我使用了1920*1080的分辨率来设置了预览画面的宽高,具体原因没有了解,但是降低了分辨率后占用率确实下去了。

2.使用setPreviewCallbackWithBuffer

正常的话我推荐使用这个回调来获取数据,比起setPreviewCallback来说,有几大优势

1.可以不用频繁的开辟一个新的buffer来为GC增加压力

2.有自己的回收缓存,所以不用自己再思考怎么来缓存,自接调用就好了,能达到优化性能的目的。

然后,再来讲一下,很多时候其实我们都使用的这个回调,只要注意下这儿就行了

mCamera.addCallbackBuffer(new byte[((previewWidth * previewHeight) * ImageFormat.getBitsPerPixel(ImageFormat.NV21)) / 8]);

在计算的byte[]长度的时候,如果字节数组长度过大,会使CPU占用率提高的,最好是算一下当前帧所需要的字节长度,再设置会好很多,使用width * height *3 应该就是标准的字节长度,具体自己测试一下吧。

总结:

说了一大堆废话,总结一下,目前我了解的就两原因:

1.分辨率,要求不高就调低点吧

2.使用CallbackBuffer时,addCallbackBuffer的长度不要超过原始数据太大,也会导致cpu占用增大。

以上只是我个人的一些理解,说错的地方欢迎指正,也希望能有大佬能补充补充。另外有个自定义的相机拍照预览的小Demo,有需要的同学可以找我。

谢谢

android systemserver 占用cpu 高,关于system/bin/mediaserver占用CPU高的 解决方法相关推荐

  1. php怎么会占用磁盘,window_win10占用硬盘高怎么办?win10磁盘占用率达100%解决方法,  win10占用硬盘高怎么办呢? - phpStudy...

    win10占用硬盘高怎么办?win10磁盘占用率达100%解决方法 win10占用硬盘高怎么办呢?很多升级为win10的用户都出现了win10系统磁盘占用率50%或100%的情况,这样让系统的运行速度 ...

  2. 对于高并发短连接造成Cannot assign requested address解决方法

    对于高并发短连接造成Cannot assign requested address解决方法 参考文章: (1)对于高并发短连接造成Cannot assign requested address解决方法 ...

  3. 无法将文件“ “复制到“bin\*.*”。对路径“bin\*.*”的访问被拒绝。 解决方法

    无法将文件" "复制到"bin\*.*".对路径"bin\*.*"的访问被拒绝. 解决方法 参考文章: (1)无法将文件" &qu ...

  4. Android 11.0 12.0蓝牙遥控器确认键弹不出输入法的解决方法

    1.概述 在android11.0 12.0设备定制化开发时,遥控器是使用红外遥控器,也有使用蓝牙遥控器的,所以出现的问题不一定相同,今天遇到个问题就是蓝牙遥控器在输入数据时弹不出输入法的问题 首选排 ...

  5. su oracle失败,su: /bin/bash: Permission denied错误的解决方法

    su: /bin/bash: Permission denied错误的解决方法,遇到类似问题的朋友可以参考下. 客户一个oracle突然当机了,由于业务启动,客户下意识的重启了服务器,系统是起来了,准 ...

  6. Android编程中调用Camera时预览画面有旋转问题的解决方法

    本文实例讲述了Android编程中调用Camera时预览画面有旋转问题的解决方法.分享给大家供大家参考,具体如下: 在调用Camera写应用的时候,前后摄像头的情况有时候是不一样的.有时候,明明后摄像 ...

  7. Android手机插上usb能充电但不能识别的一种解决方法

    Android手机插上usb能充电但不能识别的一种解决方法 参考文章: (1)Android手机插上usb能充电但不能识别的一种解决方法 (2)https://www.cnblogs.com/JOUO ...

  8. system.ComponentModel.Win32Exception (0x80004005): 目录名无效。 解决方法

    system.ComponentModel.Win32Exception (0x80004005): 目录名无效. 解决方法 参考文章: (1)system.ComponentModel.Win32E ...

  9. android 摄像头花屏_关于Android 4.4相机预览、录像花屏的问题的解决方法

    关于Android 4.4相机预览.录像花屏的问题的解决方法 系统: lc android4.4 在做前后摄像头录像的时候,发现会出现花屏的时候,但不是必现,可能会在某一次重启之后会出现,而且出现之后 ...

最新文章

  1. Activit流程部署、删除
  2. 数据结构-单链表进阶之快慢指针原理(快速查找法)
  3. linux中menu命令,menucofig 详解
  4. HD 2955 Robberies(0-1背包)
  5. java 桥 word_java导出word的6种方式(转发)
  6. 去掉Phoca Download的Powered By
  7. System.Text.Json 中的字符编码
  8. 递归算法的总结与应用
  9. 【编译原理笔记11】中间代码生成:类型表达式,声明语句的翻译
  10. [贪心+模拟] zoj 3829 Known Notation
  11. java类加载器ClassLoader浅析
  12. 学以致用——使用莱斯利矩阵模型预测蠵龟种群数量的演变(Demographics of the Loggerhead Sea Turtle using Leslie population model)
  13. Spring Bean生命周期,好像人的一生。。
  14. 一文搞懂 RabbitMQ 延时队列(订单定时取消为例)
  15. java normalize_node.js中的path.normalize方法使用说明
  16. 响应式布局的基本介绍及原理
  17. HDU 4489 找出n!个全排列数中的“波浪数” dp 思维,全排列
  18. UML用例图之关联关系、包含关系、扩展关系、泛化关系详解
  19. iOS - UILabel点击选中文字,部分高亮,YYLabel
  20. 【Codeforces301E】Yaroslav and Arrangements

热门文章

  1. python自动发送邮件
  2. PPT导出的视频变回PPT(MATLAB)
  3. 概率论考点总结类型11 联合分布函数和边缘分布函数
  4. 市值蒸发400亿,洋河迎来抉择时刻
  5. 基于CSS的3D旋转画册的制作
  6. CRichEditCtrl使用大全
  7. c 语言结构体类型转换,C 语言编程 — 结构体的数据类型转换
  8. BAT批处理基本命令总结
  9. linux端口进程号pid,Linux根据端口号查看进程PID
  10. Weblogic 中间件