Android 8.0以上启动Service

在Android 8.0及以上版本,后台Service受到限制,需使用startForegroundService启动,并在5秒内调用startForeground显示前台通知。否则将导致ANR或应用崩溃。在MainActivity启动服务后,Service类中执行startForeground方法,通知ID不能为0,否则会出现错误提示。完成服务运行后需关闭前台服务。
摘要由CSDN通过智能技术生成

问题

在android 8.0以上版本谷歌对后台service进行了严格限制,不允许后台service默默的存在,若想用service,必须以startForegroundService的方式启动service且必须在service内部5s内执行startForeground方法显示一个前台通知,否则会产生ANR或者crash。

解决问题

在MainActivity中启动服务

Intent intent1 = new Intent();
intent1.setClass(this, TestService.class);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    startForegroundService(intent1);
} else {
    startService(intent1);
}

TestService类

public class TestService extends Service {

    private static final String ID = "channel_1";
    private static final String NAME = "前台服务";

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("日常打log", "onCreate");
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值