Android开发:是否需在独立线程调用PowerManager的reboot方法?
关于PowerManager.reboot()的线程调用问题
嘿,这个问题我之前做系统级应用的时候刚好碰到过,给你详细捋清楚:
不需要刻意放在独立线程执行
调用PowerManager.reboot()之后,系统会立即启动重启流程,你的应用进程很快就会被系统终止,这个方法本身不会有长时间的阻塞等待(毕竟设备马上要重启了)。哪怕你在主线程调用,也不会触发ANR——因为还没到ANR的超时时间,进程就已经被干掉了。但有几个关键注意点要记牢
- 必须持有
REBOOT权限,而且这个是系统级权限,普通第三方App拿不到,只有系统应用或者和系统签名一致的App才能申请使用。 - 不管你在哪个线程调用,
reboot()之后的代码都不会被执行,因为进程已经不存在了。比如你在调用后加个Log,肯定打不出来。 - 如果是UI交互触发的重启(比如用户点击按钮),从代码规范角度,主线程尽量只处理UI逻辑,你可以放在子线程里,但这更多是代码风格问题,不是硬性要求。
- 必须持有
给你贴个简单的代码示例:
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); if (powerManager != null) { // 主线程/子线程调用都能正常触发重启 powerManager.reboot("user_request"); }
总结一下:直接在当前线程调用完全没问题,不需要额外开独立线程,核心是确保你有足够的权限,以及清楚调用后进程会立即终止这一点。
内容的提问来源于stack exchange,提问作者d3xter
相关产品推荐
相关产品推荐

