【问题标题】:Android threads and battery lifeAndroid线程和电池寿命
【发布时间】:2014-07-09 18:16:56
【问题描述】:

如果我的应用程序中运行了多个线程,所有这些线程都有一个 while(true) 循环,其中任何一个都没有 Thread.sleep() 来充当 ghetto 动作侦听器,这会对我的电池寿命产生负面影响吗?但是,按照常规逻辑,我不确定处理器对 while 循环的持续监控是否会造成重大的电池损耗?

【问题讨论】:

  • 所以我知道这是对我的问题的迟到评论。但是你永远不应该使用 while(true) 循环来检查可能发生的情况。 While(true) 将耗尽该线程的 cpu 100% 并将耗尽电池
  • 如果您将 While(condition) 与同步和锁定和 wait() 一起使用,那么它是更好的选择。永远不要使用无限循环线程,因为它们会占用大量系统资源
  • while(true) 但是使用 Thread.sleep(sometime) 怎么样。例如,sometime 可能至少等于 500(毫秒)。这会好吗?或者必须使用的最小值是多少?

标签: java android multithreading battery


【解决方案1】:

归结为您在 listeners/while 循环中所做的事情。如果它涉及诸如启用 wifi 的传感器或 CPU 密集型任务或网络 i/o 之类的东西,那么它非常明显,否则你应该做得很好。 主要是少数操作系统功能也在后台执行相同的操作。

但是,在 android 中似乎有更好的方法来处理此类事情,为什么不尝试一下。

【讨论】:

  • 我看到了对类似问题的类似回复,但什么是“密集型”?在我看来,执行 count++ 的 while 循环似乎很密集,还是我错了?
  • 根据您的建议,您似乎做得很好,因为简单的增量不符合密集型要求,但是使用 BigInteger/BigDecimal 进行一些高阶计算可以让您的 CPU 折腾(我想不是你想要的)。更多如之前提到的激活传感器、位图操作、编码解码视频等(如果有的话)。希望你现在能掌握它。
  • @humblerookie 你有任何参考来支持这一点或更详细地解释吗?在常规 Java 中,任何不调用等待中断(例如显式等待、锁定、同步、I/O)的东西都被称为“密集型”,包括一个简单的count++——因为 CPU 将在循环中以同样快的速度循环尽其所能。
  • 假设我有一个线程每秒更新一个数据库,会不会太耗电?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
相关资源
最近更新 更多