如何解决Android Foreground Service问题
BaseP
在寻址mWindowManager
的{{1}}中引发错误。但是很明显,它已经在onDestroy
内部进行了初始化。
我正在从一个活动中启动此前台服务,然后将其销毁。因此,该服务独立运行。并且当用户想要销毁服务时,他/她必须打开应用程序并将其从活动中销毁。此问题仅来自某些设备,我很困惑导致此错误的原因。有人可以帮我吗?
lateinit property mWindowManager has not been initialized
解决方法
- 为什么不初始化mWindowManager?
private val mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
- 如果需要使用lateinit var,则应检查初始化状态:
if (::mWindowManager.isInitialized) mWindowManager.removeView(mFloatingView)
-
不建议在
onDestroy()
中使用任何用于服务的逻辑,因为不能确定调用了该逻辑。 -
您不需要删除视图,因为服务完成/终止后,视图会自动删除。
-
我写了a few articles about floating windows on Android。作为Floating Apps的作者,我对此有所了解,并相信我,对于某些设备来说,怪异且绝对不可预测的行为是正常的。
您的问题的说明:
在某些情况下(内存不足等),您的服务可能会重新启动,并且由于您不想重新交付(您只有START_STICK
),因此不会调用您的onStartCommand
。 / p>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。