在Android中,退出APP界面后通过startService()方法启动的服务很快就会随之停止,在一些需求中需要在退出APP界面的情况下保证Service一直在运行,其中一个方法就是将Service设置成前台服务。设置前台服务首先需要在配置文件中添加权限:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
自定义通知消息的布局:
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.item_notification);
如果需要实现点击效果:
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
notification.setContentIntent(pi)
然后在Service的onStartCommand()方法中:
Notification notification = new NotificationCompat.Builder(this, "CHANNEL")
.setStyle(new NotificationCompat.DecoratedCustomViewStyle())
.setContent(remoteViews)
.setSmallIcon(R.mipmap.ic_launcher)
.build();
startForeground(1, notification);
安卓8之后的版本中需要在前面设置消息渠道,notification中的渠道id必须要与notificationChanel中的id相同。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel("CHANNEL", getString(R.string.app_name), NotificationManager.IMPORTANCE_DEFAULT);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(getColor(R.color.black));
notificationChannel.enableVibration(false);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (notificationManager != null) {
notificationManager.createNotificationChannel(notificationChannel);
停止前台服务,参数代表是否删除通知栏上的通知:
stopForeground(true);
(2)Android进程被杀之后拉起复活
Low Memory Killer
Android系统会依据系统资源和进程优先级(oom_adj)对进程进行回收,这即是Low Memory Killer规则。
进程的优先级
进程的优先级(oom_adj),划分5级:
前台进程(Foreground process)
可见进程(Visible process)
服务进程(Service process)
后台进程(Backgroun
AndroidKeepAlive
2023年最新 Android 高可用黑科技应用保活,实现终极目标,最高适配Android 14 小米 华为 Oppo vivo 等最新机型 拒绝强杀 开机自启动
一、前台服务的简单介绍
前台服务是那些被认为用户知道且在系统内存不足的时候不允许系统杀死的服务。前台服务必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下——这就意味着通知只有在这个服务被终止或从前台主动移除通知后才能被解除。
最常见的表现形式就是音乐播放服务,应用程序后台运行时,用户可以通过通知栏,知道当前播放内容,并进行暂停、继续、切歌等相关操作。
二、为什么使用前台服务
后台运行的Service系统优先级相对较低,当系统内存不足时,在后台运行的Service就有可能被回收,为了保持后台服务的正常运行及相关操作,可以选择将需要保持运行的Service设置为前台服务,从
代码可以直接运行,实现了android平台服务的前台化,并以Notification显示到右下脚。代码可以在任何版本API运行。考虑了各种版本的API情况。内部使用了发射机制。
简略说下服务前台化的好处:即提高了服务的优先级别,普通服务是默认后台运行的。当android系统发现内存不够时,极易自动killed掉你的服务。如果,改用前台则不易被killed,当然,内存极度低时同样会killed。
本代码来源于对android的apidemos的研究。
weixin_51200150: