进程保活
Android系统升级到了Oreo,本来理论上能正常跑的app被莫名其妙kill掉了,之前写的app也遇到了这样的问题。因此在这里记录一下几个保活的实现方式。
Android8.0新特性之一:为提高设备性能,系统会限制未在前台运行的应用的某些行为,具体而言,现在在后台运行的应用对后台服务的访问受到限制。 应用无法使用其清单注册大部分隐式广播(即,并非专门针对此应用的广播)。
以下表格出自网络,侵删。

保活方式:
1.开启前台Service,即Notification
SDK Version >= 26的情况下,Notification的适配代码:
String channelId = "channel_01";
String name="channel_name";
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(channelId, name, NotificationManager.IMPORTANCE_LOW);
Log.i(TAG, mChannel.toString());
if (notificationManager != null) {
notificationManager.createNotificationChannel(mChannel);
}
notification = new Notification.Builder(this)
.setChannelId(channelId)
.setContentTitle("位置模拟服务已启动")
.setContentText("MockLocation service is running")
.setSmallIcon(R.mipmap.ic_launcher).build();
} else {
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setContentTitle("位置模拟服务已启动")
.setContentText("MockLocation service is running")
.setSmallIcon(R.mipmap.ic_launcher)
.setOngoing(true)
.setChannelId(channelId);//无效
notification = notificationBuilder.b

随着Android系统升级到Oreo,后台应用的保活变得更具挑战性,因为系统限制了后台服务的访问。本文探讨了两种保活方法:通过开启前台Service与显示悬浮窗。在SDK Version 26及以上,即使使用Notification启动前台Service,服务仍可能在一分钟后被kill,但连接USB调试时则不会。悬浮窗保活方案更为稳定,通过创建简单的悬浮按钮确保应用不被关闭。此外,提到双进程守护和灰色保活等传统方式可能在高版本中无效,建议优先考虑前两种方法。
593

被折叠的 条评论
为什么被折叠?



