Android 前台服务()问题
Android Foreground Service() issue
mWindowManager
在 onDestroy
寻址 lateinit property mWindowManager has not been initialized
中抛出错误。但是明明已经在onStartCommand
里面初始化了。
我从一个 activity 开始这个前台服务,然后被销毁。所以这项服务 运行 是独立的。当用户想要销毁服务时 he/she 必须打开应用程序并从 activity 销毁它。此问题仅来自某些设备,我对导致此错误的原因感到困惑。有人可以帮我吗?
class PremiumService : BaseService(), View.OnClickListener {
private lateinit var mWindowManager: WindowManager
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
mWindowManager.addView(mFloatingView, params)
return START_STICKY
}
override fun onDestroy() {
mWindowManager.removeView(mFloatingView)
super.onDestroy()
}
}
- 为什么不在赋值中初始化 mWindowManager?
private val mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
- 如果你需要使用lateinit var,你应该检查初始化状态:
if (::mWindowManager.isInitialized) mWindowManager.removeView(mFloatingView)
不建议在 onDestroy()
中为服务添加任何逻辑,因为您无法确定它是否被调用。
您不需要删除视图,因为当服务 finished/killed.
时它们会自动删除
我写了 a few articles about floating windows on Android. As the author of Floating Apps,我对此有所了解,相信我,对于某些设备来说,奇怪且绝对不可预测的行为是正常的。
问题说明:
您的服务可能会在某些情况下(内存不足等)重新启动,并且由于您不想重新交付(您只有 START_STICK
),您 onStartCommand
不会被调用.
mWindowManager
在 onDestroy
寻址 lateinit property mWindowManager has not been initialized
中抛出错误。但是明明已经在onStartCommand
里面初始化了。
我从一个 activity 开始这个前台服务,然后被销毁。所以这项服务 运行 是独立的。当用户想要销毁服务时 he/she 必须打开应用程序并从 activity 销毁它。此问题仅来自某些设备,我对导致此错误的原因感到困惑。有人可以帮我吗?
class PremiumService : BaseService(), View.OnClickListener {
private lateinit var mWindowManager: WindowManager
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
mWindowManager.addView(mFloatingView, params)
return START_STICKY
}
override fun onDestroy() {
mWindowManager.removeView(mFloatingView)
super.onDestroy()
}
}
- 为什么不在赋值中初始化 mWindowManager?
private val mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
- 如果你需要使用lateinit var,你应该检查初始化状态:
if (::mWindowManager.isInitialized) mWindowManager.removeView(mFloatingView)
不建议在
onDestroy()
中为服务添加任何逻辑,因为您无法确定它是否被调用。您不需要删除视图,因为当服务 finished/killed.
时它们会自动删除我写了 a few articles about floating windows on Android. As the author of Floating Apps,我对此有所了解,相信我,对于某些设备来说,奇怪且绝对不可预测的行为是正常的。
问题说明:
您的服务可能会在某些情况下(内存不足等)重新启动,并且由于您不想重新交付(您只有 START_STICK
),您 onStartCommand
不会被调用.