问题描述
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>