Service----前台Service
2018-11-07 本文已影响0人
爱做梦的严重精神病患者
Service的系统优先级是比较低的,当系统出现内存不足的情况时,就有可能会回收掉在后台运行的Service。如果希望Service可以一直保持运行状态,而不会由于系统不足的原因导致被回收,可以考虑使用前台Service。
前台Service和普通Service最大的区别就在于,它会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于Notification的效果。
启动前台Service需要使用startForeground()方法,这个方法接收两个参数,第一个参数是Notification的id,第二个参数是构建出的Notification对象。在8.0以上的系统中,还需要创建NotificationChannel。
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
String channelId = "channel";
String channelName = "channel_name";
NotificationChannel channel = new NotificationChannel(channelId,
channelName, NotificationManager.IMPORTANCE_HIGH);
channel.enableLights(true);
channel.setLightColor(Color.RED);
channel.setShowBadge(true);
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
manager.createNotificationChannel(channel);
Intent notificationIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
Notification notification = new Notification.Builder(this, channelId)
.setChannelId(channelId)
.setContentTitle("有新消息来了")
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentText("哈哈哈啊哈")
.setSmallIcon(R.drawable.ic_launcher_background)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_foreground))
.setContentIntent(pendingIntent)
.build();
startForeground(1, notification);