当前位置: 首页 > news >正文

解决Android8.0之后开启service时报错IllegalStateException: Not allowed to start service Intent ......

项目测试时发现的,在双击返回键关闭应用后(并未杀死后台)重新打开APP,其他手机都OK,但是8.0的手机会出现较频繁的crash。检查代码,问题锁定在重新开启应用时的startService()上。

查找资料说是Android 8.0 不再允许后台service直接通过startService方式去启动,否则就会引起IllegalStateException。而网上给出的解决方式大多是这样的:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        context.startForegroundService(new Intent(context, MyService.class));
    } else {
        context.startService(new Intent(context, MyService.class));
    }

然后必须在Myservice中调用startForeground():

@Override
public void onCreate() {
    super.onCreate();
    startForeground(1,new Notification());
}

 

不过可能是我代码本身的问题,使用上面代码之后应用报出RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid ch...

然后做了一些修改,其他的不变,只是在要开启的service中给notification添加 channelId:

public static final String CHANNEL_ID_STRING = "service_01";

    @Override
    public void onCreate() {
        super.onCreate();
        //适配8.0service
        NotificationManager notificationManager = (NotificationManager) MyApp.getInstance().getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel mChannel = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            mChannel = new NotificationChannel(CHANNEL_ID_STRING, getString(R.string.app_name),
                    NotificationManager.IMPORTANCE_LOW);
            notificationManager.createNotificationChannel(mChannel);
            Notification notification = new Notification.Builder(getApplicationContext(), CHANNEL_ID_STRING).build();
            startForeground(1, notification);
        }
}

ok,可以正常跑起来了。

 

参考地址:https://blog.csdn.net/o279642707/article/details/82352431?utm_source=blogxgwz0

 

转载于:https://www.cnblogs.com/Sharley/p/10248384.html

相关文章:

  • 技术篇-HBase 最佳实践-读性能优化策略
  • IaaS,PaaS和SaaS,又衍生出CaaS,NaaS和MaaS
  • Spring Cloud 下线微服务
  • 让UITableView的Cell都变成静态的
  • 牛客练习赛37
  • 『原创』设置SQL Server 2005自动备份——数据库邮件设置(图文)
  • Gmail工具和插件网址大全
  • 北京城市生态系统研究站取得2011年国自然科学基金重点基金资助
  • samba 文件共享
  • Nginx的介绍
  • 14个值得推荐的个人提升方法
  • 上海科学家研制出新型“耐火宣纸”
  • Java Web:项目结构和web.xml
  • 调查:澳门96%打工者称奖金、薪酬决定工作去留
  • 前端技术周刊 2019-01-14:客户端存储
  • CSS 三角实现
  • HomeBrew常规使用教程
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JS变量作用域
  • Mocha测试初探
  • Redis 中的布隆过滤器
  • spring security oauth2 password授权模式
  • Travix是如何部署应用程序到Kubernetes上的
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 前端面试总结(at, md)
  • 使用docker-compose进行多节点部署
  • 数据科学 第 3 章 11 字符串处理
  • elasticsearch-head插件安装
  • kubernetes资源对象--ingress
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​力扣解法汇总946-验证栈序列
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (zhuan) 一些RL的文献(及笔记)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (编译到47%失败)to be deleted
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)WCF的Binding模型
  • (一)UDP基本编程步骤
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .java 9 找不到符号_java找不到符号
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • @JSONField或@JsonProperty注解使用
  • @PreAuthorize注解
  • []T 还是 []*T, 这是一个问题
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [C#] 如何调用Python脚本程序
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败