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