我正在尝试开发一个在屏幕上绘制浮动叠加层的Android应用程序,因为它是由Facebook Messenger与聊天头完成的。
我已经创建了一个Android服务,我可以从中处理UI。一切运作良好,但在某些设备上,服务会非常频繁地停止,有时会在超过60秒后再次启动。
我知道这是Android系统定义的行为,但我想知道是否有办法让我的服务具有最高优先级。这可能吗?我的实现中的某些内容是错误的会导致这种行为恶化吗?
答案 0 :(得分:1)
一种选择是让您的服务成为“前台服务”,简要说明in Android documentation。这意味着它在状态栏中显示一个图标,可能还有一些状态数据。引用:
前台服务是一种被认为是某种东西的服务 用户积极地意识到并因此不是系统的候选者 在内存不足时杀死。前台服务必须提供 状态栏的通知,位于“正在进行”下 标题,这意味着除非通知不能被驳回 该服务要么停止要么从前台删除。
在实践中,您只需修改服务的onStartCommand()
方法即可设置通知并致电startForeGround()
。此示例来自Android文档:
// Set the icon and the initial text to be shown.
Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text), System.currentTimeMillis());
// The pending intent is triggered when the notification is tapped.
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
// 2nd parameter is the title, 3rd one is a status message.
notification.setLatestEventInfo(this, getText(R.string.notification_title), getText(R.string.notification_message), pendingIntent);
// You can put anything non-zero in place of ONGOING_NOTIFICATION_ID.
startForeground(ONGOING_NOTIFICATION_ID, notification);
这实际上是一种不赞成设置通知的方式,但即使您使用Notification.Builder
,这个想法也是一样的。