所以我的应用程序有一些触发服务和通知的远程操作 . 在调用 startForegroundService 和服务尝试启动通知的时间之间,事情可能会发生变化,因此服务会再次检查事物的状态,然后决定要做什么 .

因此,如果我的服务决定它不需要运行,它将调用:

stopForeground(true);

stopSelf();

但由于某些原因,这似乎不起作用,因为我在进行这些调用后几乎立即得到此异常 .

11-16 13:34:23.488 15099-15099/mypackage E/AndroidRuntime: FATAL EXCEPTION: main

Process: mypackage, PID: 15099

android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768)

at android.os.Handler.dispatchMessage(Handler.java:106)

at android.os.Looper.loop(Looper.java:164)

at android.app.ActivityThread.main(ActivityThread.java:6494)

at java.lang.reflect.Method.invoke(Native Method)

at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

那我怎么解决这个问题呢?

谢谢 .

编辑:

我创建了一个示例项目,当Activity启动时它所做的就是调用 startForegroundService 然后它在服务上执行此操作:

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.i(TAG,"start");

stopForeground(true);

stopSelf();

return super.onStartCommand(intent, flags, startId);

}

它崩溃了,无论我是否使用 stopForeground(true) .

编辑:这似乎解决了它,但似乎真的很丑,必须创建一个假通知只是为了取消它 .

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.i(TAG,"start");

String CHANNEL_ID = "my_channel_01";

NotificationCompat.Builder mBuilder =

new NotificationCompat.Builder(this, CHANNEL_ID)

.setContentTitle("My notification")

.setContentText("Hello World!");

startForeground(-1,mBuilder.build());

stopForeground(true);

stopSelf();

return super.onStartCommand(intent, flags, startId);

}

java stopself_然后,即使我停止了服务,Context.startForegroundService()也没有调用Service.startForeground()...相关推荐

  1. java stopself_如何正确停止前台服务?

    我不知道它是否正确,但在我的应用程序中,我正在停止前台服务,它可以工作.请检查代码 private void stopForegroundService() { // Stop foreground ...

  2. java executorser 停止_Java使用ExecutorService来停止线程服务

    使用ExecutorService来停止线程服务 之前的文章中我们提到了ExecutorService可以使用shutdown和shutdownNow来关闭. 这两种关闭的区别在于各自的安全性和响应性 ...

  3. 【Centos】Docker停止容器服务后,磁盘I/O仍然迟迟不下降。(未解决)

    记录 前言 问题复现,故障演练 准备工作 dcim-local演练过程 系统日志message 结论 前言 安装了docker的服务器只运行了一个容器服务,停止容器服务后,磁盘I/O仍然迟迟不下降.对 ...

  4. Java的jar文件安装成windows 服务

    Java的jar文件安装成windows 服务: 1.下载:nssm,复制到jar文件目录下 2. jar文件目录下创建bat文件[run.bat],内容为[java -jar 文件名.jar] 3. ...

  5. 启动和停止MySQL服务

    1.  启动MySQL服务 启动MySQL服务的命令为: /etc/init.d/mysqld start 命令执行后如图7-5所示,表示启动MySQL服务成功.   (点击查看大图)图7-5  启动 ...

  6. 闹乌龙!京东云辟谣:停止云服务?根本没那回事儿

    2月9日晚6点左右,一条以"传京东云服务将关闭 ,28日后停止技术支持 "为标题的微信开始在朋友圈中疯转,并引起了许多云服务商的强烈关注. 这条新闻的起源于是京东云发布的一条声明, ...

  7. 【OF框架】使用OF.WinService项目,添加定时服务,进行创建启动停止删除服务操作...

    准备 使用框架搭建完成项目,包含OF.WinService项目. 了解Window Service 和定时服务相关知识. 一.添加一个定时服务 第一步:了解项目结构 第二步:创建一个新的Job 第三步 ...

  8. mysql停止主从_不停止mysql服务配置主从

    不影响主库线上的服务前提下,增加从库,前提是线上的主库配置中已经开启binlog并且指定了server-id. linux主192.168.0.70 版本Centos6.7 nginx1.10 php ...

  9. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

最新文章

  1. python自动测试p-Python自动化测试
  2. zend studio 9.0汉化
  3. 微软一站式示例代码库 2012 年2月示例代码更新。8个全新示例为您的开发保驾护航...
  4. Web前端好学吗 学完之后能干什么
  5. java类 连接时机_java类的加载时机
  6. Oracle IMP数据时报20001错误
  7. bzoj 3709: [PA2014]Bohater
  8. 批处理之计划任务at和schtasks
  9. H5实现点击图片放大功能
  10. Linux Deploy 2.0 中文,Linux Deploy:在Android上部署Linux
  11. mac过热_如何阻止Mac过热
  12. 读书笔记5.1——《让数字说话:审计,就这么简单》:孙含晖
  13. minikube start命令的国内使用方法
  14. 全球及中国阻力带行业市场前瞻及投资竞争力分析报告2022-2027年
  15. j2ee与j2se对比
  16. 喜报!字根科技牵手荣之联,提供错别字检测解决方案
  17. 如果你觉得累,这三个“高内耗”行为,一定要戒掉!
  18. 数据访问安全代理 CASB
  19. KubeEdge环境搭建(支持网络插件flannel)
  20. L2范数-欧几里得范数

热门文章

  1. apache lucene_Apache Lucene基础教程
  2. junit runner_了解JUnit的Runner架构
  3. junit测试报告生成_这是东西:jUnit:动态测试生成
  4. 49自动化测试中最常见的硒异常
  5. 使用密钥加密码加密_创建基于密码的加密密钥
  6. mapreduce 算法_MapReduce算法–了解数据联接第1部分
  7. 反序列化 jackson_使用Jackson和Super类型令牌的Json反序列化
  8. 信守承诺:JAX-RS API的基于合同的测试
  9. 使用Gradle的maven-publish插件发布快照
  10. JPA和Hibernate级联类型的初学者指南