Android Foreground Service问题

问题描述

BaseP在寻址mWindowManager的{​​{1}}中引发错误。但是很明显,它已经在onDestroy内部进行了初始化。 我正在从一个活动中启动此前台服务,然后将其销毁。因此,该服务独立运行。并且当用户想要销毁服务时,他/她必须打开应用程序并将其从活动中销毁。此问题仅来自某些设备,我很困惑导致此错误的原因。有人可以帮我吗?

lateinit property mWindowManager has not been initialized

解决方法

  1. 为什么不初始化mWindowManager?

private val mWindowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager

  1. 如果需要使用lateinit var,则应检查初始化状态:

if (::mWindowManager.isInitialized) mWindowManager.removeView(mFloatingView)

  1. 不建议在onDestroy()中使用任何用于服务的逻辑,因为不能确定调用了该逻辑。

  2. 您不需要删除视图,因为服务完成/终止后,视图会自动删除。

  3. 我写了a few articles about floating windows on Android。作为Floating Apps的作者,我对此有所了解,并相信我,对于某些设备来说,怪异且绝对不可预测的行为是正常的。


您的问题的说明:

在某些情况下(内存不足等),您的服务可能会重新启动,并且由于您不想重新交付(您只有START_STICK),因此不会调用您的onStartCommand。 / p>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...