android播放视频过程cpu占用高,Android App高CPU使用率和电池消耗
我已经从事Android游戏已有一段时间了。我已经实现了基本游戏,所以现在我要回去尝试优化。似乎电池消耗和CPU使用率对于我正在执行的操作来说太高了。我实际上只有我的主线程,然后所有绘图和更新都是在单独的线程上完成的。
以下是进行更新和所有绘图的实际游戏线程的代码。所有实际的代码都已删除,剩下的就是我正在尝试找出异常的CPU使用率/电池消耗的实验。
因此,基本上,如果我仅使用无限的while循环来启动以下线程,则该应用在使用30分钟后将消耗约315mAh或约9%的手机电池电量。如果我在run方法中不使用代码启动线程,以使其在运行一次后失效,则在相同的时间内它会消耗大约70mAh或2%的手机电池电量。当线程运行并仅运行无限循环时,CPU使用率也从不运行线程的2%-3%跃升至大约14%-15%。
总而言之,似乎仅使用无限while循环运行线程,什么也不做,在30分钟内将电池使用量增加了7%。我不知道这是怎么可能的,并认为我一定会丢失一些东西。我将继续努力解决这个问题,但是没有更多代码可以提取了。如果有人有任何建议或可以提供一些有关为什么发生这种情况的见解,我将不胜感激。提前致谢。
class InnerThread extends Thread
{
public InnerThread()
{
super();
}
public void run()
{
while(true){}
}
}
无延迟或无节奏的循环因占用CPU和电池而臭名昭著。仔细考虑您是否真的需要连续处理,或者每帧一次,每个任意时间间隔一次还是每次外部事件发生一次就足够了。尝试在循环中添加一个小的任意延迟,您可能会立即看到改进。
许多游戏使用主游戏循环。这是一个可搜索的术语。基本上,一个无限循环执行一些计算,绘制一个帧,然后通常休眠一段时间。 (请参阅SystemClock.sleep()与Thread.sleep()。)您的主循环可以将帧号和时间戳传递给其余代码。您可以每帧计算移动对象的位置,但是可以做更复杂的事情,例如仅在一定时间间隔或帧内更新敌人的AI。如果您使用Unity之类的游戏引擎,则主循环仍然存在,但您不必自己编写。您只需编写它调用每一帧的代码。
所以我认为这可能是问题所在。我进行了测试,它以每秒13,000帧的速度运行,这显然太高了,无法满足我的需求。理想的是使其以60 FPS的速度运行。香港专业教育学院试图使用System.nanotime来保持帧率,但在那种情况下,大多数游戏代码都以60 FPS运行,但是保持帧率的代码仍以13,000+ FPS运行。我可以尝试以其他方式保持帧速率,延迟的首选方式是什么? SystemClock.sleep?
@Envenge编辑。
非常感谢您的帮助。我有游戏循环的经验,并实现了一个游戏,我只是删除了实际的代码以尝试使循环中的代码最少,以确保我没有内存泄漏或内部某处引起CPU使用率飙升的东西。和电池消耗。对我来说,多线程是一个相当新的概念,我仍在尝试充分利用。肯定有很多东西要学习,我再次感谢您的时间和耐心来解释似乎很明显的事情。
我经历并编辑了我的代码。利用thread.sleep限制整体绘制并将代码更新为每秒60帧。我还使用了Object.wait()和Object.notify()方法来减少不必要的线程处理。我看到了巨大的进步,感谢您的帮助,我非常感谢。我的问题绝对是我在浪费电池和CPU电源处理任何事情。
while(true)是经典的无穷循环,在Java中可能不需要。
它甚至不在哪个线程上运行都很重要,它很可能会耗尽汁液。
请参见" while(true)"循环是如此糟糕吗?
嗨,while(true)循环是无限的,因此它只需做少量工作即可保持线程运行以测试线程的电池消耗。我想最大程度地减少线程正在执行的工作量,以查看我能用多低的电量消耗电池并仍然使线程运行。
@Envenge您并没有减少工作量。旋转while(true)与执行一些有用的计算一样多。
@Envenge是另一个答案,除非添加一些缓动...否则它将以最大迭代速度运行并严格消耗电池电量。这是可以在交流电源机器上执行的操作,但不能在移动设备上执行。最好只在需要时执行处理。
例如。当添加Thread.sleep(500)时,它仍然每秒迭代两次。但这是一种解决方法。重新考虑建议的基本业务逻辑。
香港专业教育学院已经玩了一点,但还没有找到最好的方法来做到这一点,而不会稍微影响游戏性能。麻烦研究一下重新组织代码,并尝试使线程定期进入睡眠状态。感谢您的快速回复!
@Envenge您需要确定您甚至需要在其中运行任何代码的频率。可能添加服务会有所帮助;这也将拥有自己的线程并继续运行。尝试使其成为基于事件的游戏,或者查看其他游戏引擎的源代码以及它们的处理方式。
android播放视频过程cpu占用高,Android App高CPU使用率和电池消耗相关推荐
- android视频播放异常,Android 播放视频常见问题小结
在android 开发中常见到视频播放的问题,在常规的视频中 有直接用videoView + MediaController 或者 mediaController + serfercie holder ...
- Android播放视频或视频通话只有声音没有画面解决方法,布局刷新失败解决办法
Android播放视频或视频通话只有声音没有画面这个问题困扰我好几天,原因竟然是因为Mainfest.xml里的一个属性:hardwareAccelerated android:hardwareAcc ...
- java与js交互视频_Android与H5交互—Java调用Js、Js调Java、H5页面调用Android播放视频...
content="ANZO,GAME,LOL,DNF,DOTA,撸啊撸,地下城与勇士,掌游宝,攻略,宝典,模拟器,加点,战报,英雄,最新,最全,最强,视频"> content ...
- android yuv加水印_在Android采集视频过程中增加水印功能实现
CSDN旧文搬迁! 在Android采集视频过程中增加水印,并且水印包含一个变化的时间戳,这里考虑方案实现的时候,就想到了ffmpeg,ffmpeg包含很多filter能实现水印添加的功能. 基本实现 ...
- Android中mesure过程详解 (结合Android 4.0.4 最新源码)
如何遍历并绘制View树?之前的文章Android中invalidate() 函数详解(结合Android 4.0.4 最新源码)中提到invalidate()最后会发起一个View树遍历的请求,并通 ...
- Android中layout过程详解 (结合Android 4.0.4 最新源码)
上一篇文章Android中mesure过程详解 (结合Android 4.0.4 最新源码)介绍了View树的measure过程,相对与measure过程,本文介绍的layout过程要简单多了,正如l ...
- qt android播放器代码,Qt on android 播放视频的实现
本文介绍的是使用QML进行视频的播放,可以直接编译为APK在android上运行. QML中对多媒体的处理提供了很多方便的组件,对于播放音频.视频都很方便.这些多媒体组件属于Qt Multimedia ...
- cocos android 播放视频,Cocos2d-x IOS 和Android播放视频
本篇文章会给大家介绍在对IOS 和Android开发时,是如何实现播放视频这个功能的,下面就分别给大家介绍下. 一. iOS播放本地视频 对于ios平台的视频播放,这里直接使用MediaPlayer. ...
- Android播放视频快进帧预览图完美解決方案
播放视频快进预览图完美解決方案,使用方法如下,使用FFmpeg,不影响原有播放器, 就是先截取缩略图保存下来,快进时选用图片显示,最优方案,播放性能最好,体验完美. 参考github: https:/ ...
最新文章
- webmagic 获取文本_WebMagic Selectable抽取元素
- Shi-Tomasi算子的运用 ,用于检测角点
- 2019年, SGG论文汇总
- Windows Mobile 编程 (Win32) - 获取设备能力
- 京东布局消费物联网 聚合产业链共建生态
- Mysql更改表名大小写不敏感
- apache配置多个虚拟主机
- 95-230-010-源码-WordCount走读-概述
- 【玩转Colab】GitHub标星3.6k | 给AI一张高清照片,分分钟还你细节满满的3D人体模型!
- 检测压缩包并处理的Linux脚本(解压、批量修改文件名、导入)分析
- 使用echarts将Excel的数据可视化
- VirtualLab基础实验教程-7.偏振(2)
- sql server 函數
- 用中文把玩Google开源的Deep-Learning项目word2vec
- linux系统——管道
- ABAP BDC返回成功但是未创建单据或没有产生相应效果
- DHCP snooping详解
- Java构建HashCode相同字符串算法
- 咸鱼怎么翻身?非计算机专业26岁转行Java,坚持了三年终于年薪36W+
- 前端生成二维码与图片合成
热门文章
- html5 基础入门
- Spring入门(一):创建Spring项目
- 电力网络通信公司有哪些,电力网络通信公司排名
- Linux命令(65)——ld命令
- 软件测试电视机怎么测试,现在不怕被骗!教你终极电视测试技巧
- nginx安全下载模块ngx_http_secure_link_module
- 嵌入式音频架构 - AudioWeaver模块库 Filter 滤波器
- [python]抓取网易云用户的听歌排行
- 快速了解深度学习框架--tensorflow(更新中)
- Android中am命令用法