1

我有一个连接到蓝牙外围设备的 Android 服务。

我不希望 Android 自行决定终止我的服务,因为这会破坏应用程序的目的。

但是,该应用程序有时会尝试启动服务并在它只是怀疑BT 设备可能在范围内时进行连接——这可能成功也可能失败。除非连接成功,否则我不想在服务变为前台服务时显示通知来打扰用户。(用户可以启用或禁用此功能,因此它不是在用户背后做事。)

因此,我考虑将呼叫延迟到startForeground()蓝牙连接完成。散文中的简要描述(因为代码会很长):

  • MyService#onStartCommand()创建一个 AsyncTask 并启动它(它将在后台线程中运行,以使冗长的蓝牙连接设置远离 UI 线程)。
  • AsyncTask#run()设置蓝牙连接。
  • AsyncTask#onPostExecute()(完成后在 UI 线程上运行run())验证我们是否已连接,如果是,则调用startForeground()创建通知。

但是,在onStartCommand()返回后,服务仍然是后台服务的一小段时间。

Android 是否有在短时间内杀死我的服务以回收内存的风险(当它单独留下前台服务时)?

如果是这样,Android 是否会考虑自服务启动以来经过的时间(首先杀死运行时间最长的服务)?

4

0 回答 0