android 关屏后服务,Android 锁屏后Service服务保活(支持9.0)及锁屏后弹activity

本文介绍了Android应用程序在设备关屏后如何保持Service服务不被暂停,以及如何在锁屏状态下弹出Activity。通过创建NotificationChannel并与Service绑定,确保Service在后台运行。同时,通过PowerManager和KeyguardLock管理锁屏后的Activity显示,并针对Android 8.0及以上版本的后台执行限制进行了适配。
摘要由CSDN通过智能技术生成

service保活

问题:

后台Service启动正常启动后,锁屏状态下大概80秒左右Service就被暂停了(并没有被杀死),唤醒屏幕后就继续执行。

解决思路:

Service启动时创建一条通知,与其绑定,这样锁屏或者后台Service都不会被暂停或杀死。

代码如下:

在Service的onCreate中创建NotificationChannel 并且与服务绑定。

@Override

public void onCreate() {

super.onCreate();

Notification.Builder builder = new Notification.Builder(this)

.setSmallIcon(R.mipmap.notify)

.setContentTitle("title")

.setContentText("text");

//创建NotificationChannel

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

String notificationId = "TgStartServiceId";

String notificationName = "TgStartServiceName";

NotificationChannel channel = new NotificationChannel(notificationId, notificationName, NotificationManager.IMPORTANCE_HIGH);

((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);

builder.setChannelId(notificationId);

}

Notification notification = builder.build();

startForeground(1, notification);

}

开启service:

需要根据版本判断是调用startForegroundService()或者startService()函数;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

//android8.0以上通过s

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,当屏幕关闭后,设备会进入睡眠模式以节省电量。在睡眠模式下,应用程序的活动将被暂停或停止。要使您的应用程序在屏幕关闭后继续运行并接收信息,您可以使用以下两种方法之一: 1. 使用 WakeLock WakeLock 是一种锁定机制,它允许您在设备进入睡眠模式时保持应用程序处于活动状态。这意味着您的应用程序将继续在后台运行,并且您可以接收信息、数据和通知。 使用 WakeLock 需要注意两点: - 使用 WakeLock 可能会影响设备的电池寿命。 - 不要忘记在应用程序不需要使用 WakeLock 时释放它。 以下是使用 WakeLock 的代码示例: ``` PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock"); wakeLock.acquire(); ``` 2. 使用 Foreground Service 前台服务是一种长时间运行服务,它通常与用户正在进行的活动相关联。在运行前台服务时,应用程序将继续在后台运行,并且您可以接收信息、数据和通知。 使用前台服务需要注意: - 前台服务将显示一个通知,告诉用户应用程序正在运行。 - 前台服务将在设备的电池寿命方面产生一些影响。 以下是使用前台服务的代码示例: ``` public class MyService extends Service { private static final int NOTIFICATION_ID = 1; @Override public int onStartCommand(Intent intent, int flags, int startId) { Notification notification = new Notification.Builder(this) .setContentTitle("My App") .setContentText("Running in background") .setSmallIcon(R.drawable.icon) .build(); startForeground(NOTIFICATION_ID, notification); // Your code here return START_STICKY; } @Override public IBinder onBind(Intent intent) { return null; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值