我有一个连接到蓝牙外围设备的 Android 服务。
我不希望 Android 自行决定终止我的服务,因为这会破坏应用程序的目的。
但是,该应用程序有时会尝试启动服务并在它只是怀疑BT 设备可能在范围内时进行连接——这可能成功也可能失败。除非连接成功,否则我不想在服务变为前台服务时显示通知来打扰用户。(用户可以启用或禁用此功能,因此它不是在用户背后做事。)
因此,我考虑将呼叫延迟到startForeground()
蓝牙连接完成。散文中的简要描述(因为代码会很长):
MyService#onStartCommand()
创建一个 AsyncTask 并启动它(它将在后台线程中运行,以使冗长的蓝牙连接设置远离 UI 线程)。AsyncTask#run()
设置蓝牙连接。AsyncTask#onPostExecute()
(完成后在 UI 线程上运行run()
)验证我们是否已连接,如果是,则调用startForeground()
创建通知。
但是,在onStartCommand()
返回后,服务仍然是后台服务的一小段时间。
Android 是否有在短时间内杀死我的服务以回收内存的风险(当它单独留下前台服务时)?
如果是这样,Android 是否会考虑自服务启动以来经过的时间(首先杀死运行时间最长的服务)?