我已经阅读了一些与这个问题相关的答案,它们似乎都是一样的:

“使用START_STICKY运行您的服务”

“在前台运行您的服务”

“使用startService运行您的服务,不要绑定它”

我正在做所有这些事情,我的服务STILL关闭并在每次关闭活动时重新启动.

这不是IntentService.

我也没有在onClick处理程序中调用stopSelf或stopService.

请向下滚动到我的更新 – 此行为已被确认为Android操作系统中的错误,我已将其报告给谷歌. Click here to view the report.

从MainActivity启动我的服务:

svcIntent = new Intent(getBaseContext(), MyService.class);

startService(svcIntent);

在我的onStartCommand中:

// Enter foreground state

String title = "Service has been started...";

String subject = "Service is running...";

String body = "Monitoring your battery usage.";

Notification notification = new Notification(R.drawable.theicon, title,

System.currentTimeMillis());

if (prefs.getBoolean("notificationSounds", true))

notification.defaults |= Notification.DEFAULT_SOUND;

else

notification.sound = null;

Intent notificationIntent = new Intent(this, MainActivity.class);

PendingIntent pendIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

notification.setLatestEventInfo(this, subject, body, pendIntent);

startForeground(1500, notification);

在我的onStartCommand结束时:

...

// Release WakeLock

wl.release();

return START_STICKY;

UPDATE

我想出了什么导致它!但我不知道如何解决它.在我的服务中,我还使用服务中的AlarmManager在指定的时间内设置对服务的函数调用.

// Alarm manager setup for MyService

AlarmManager AM = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

svcIntent1 = new Intent(this, AlarmReceiver.class);

prefs.edit().putInt("initialBatt", initialBatt).apply();

svcIntent1.setAction("com.myApp.servicealarm");

pendingIntent = PendingIntent.getBroadcast(this, 93, svcIntent1, PendingIntent.FLAG_UPDATE_CURRENT);

// Set the alarm

AM.set(AlarmManager.RTC_WAKEUP, timeNow + waitTime, pendingIntent);

我注意到如果我不注释AM.set调用来设置警报,即使有一个EMPTY onReceive,我的服务在闹钟响起时被杀死,在我最近的应用程序中刷掉我的应用程序之后.如果我注释掉设置的警报调用,那么在关闭我的应用程序后,服务永远不会被杀死并继续运行.有没有搞错?!我的算法功能需要这个警报!

这很奇怪.一旦闹钟响起,我的调试消息就不会打印,我的服务会重新启动.但第二次,在服务重新启动后,调试消息会打印并且程序成功执行.

我已经尝试了这个,它仍然发生在普通的广播接收器上.我还将我的代码剥离到我的服务和广播接收器的设置警报调用,同样的事情发生,所以这不是我的算法.显然,如果您有一个设置闹钟的前台服务,当闹钟响起时,您的服务将重新启动.

闭幕

这种行为似乎是由Android操作系统中的一个错误引起的,所以我不希望得到答案.如果你想自己看看这个bug,click here.我提供了一个你可以编译并重现问题的项目.

java 关闭时_java – 活动关闭时服务停止相关推荐

  1. java帧结构_Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)...

    Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...

  2. java 安卓权限_java – Android运行时权限 – 如何实现

    Android Developer Documentation给出了在运行时请求权限的示例: // Here, thisActivity is the current activity if (Con ...

  3. java 自定义 钩子_Java添加关闭钩子里面的方法

    在我的代码中,我使用CompletionService和ExecutorService来启动一堆Thread来执行某些任务(这可能需要很长时间) . 所以我有一个创建ExecutorService和C ...

  4. java wsimport 调用_java – 使用wsimport时的安全性异常

    我想从wsdl文件生成存根文件,该文件可通过带有自签名证书的ssl连接访问. 当我在ant中执行此操作时,我收到此错误: generate-from-wsdl: [exec] parsing WSDL ...

  5. java socket同步_Java socket客户端与服务端同步通信实例

    工作中没涉及有关JAVA SOCKET编程的实际经历,但理论大概了解.想正明一下自已的对JAVA SOCKET理解写个通信TEST,通过TEST验证了基本与理论相近.下面是TEST SRC CODE ...

  6. java短链接_Java 网址短链接服务原理及解决方案

    一.背景 现在在各种圈的产品各种推广地址,由于URL地址过长,不美观.不方便收藏.发布.传播以及各种发文字数限制等问题,微信.微博都在使用短链接技术.最近由于使用的三方的生成.解析短链接服务开始限制使 ...

  7. java webservice 服务器_java如何写webservice服务端

    展开全部 Java 中的 Web Service 分为基于 SOAP 的和基于 REST 的两种,下面简单说一个基于 SOAP 的例子.要使用 JDK6u4 之后e69da5e6ba903231313 ...

  8. java timertask 销毁_java中TimerTask 如何才能停止呢

    java中TimerTask 如何才能停止呢 关注:99  答案:2  mip版 解决时间 2021-02-05 01:59 提问者野战女神 2021-02-04 07:50 destroy中的can ...

  9. java android对话框_java - 防止Android活动对话框关闭外部触摸

    18个解决方案 327 votes 要防止对话框在按下后退键时被解除,请使用此选项 dialog.setCancelable(false); 并且为防止对话框在外部触摸时被解雇,请使用此功能 dial ...

最新文章

  1. boost::local_time模块实现创建各种dst_calc_rule的测试程序
  2. travis-ci_使用Travis-CI的SpringBoot应用程序的CI / CD
  3. java aqua和metal_Java工具集介绍9_16
  4. 详解TCP和UDP数据段的首部格式
  5. Security+ 学习笔记1 恶意软件
  6. mysql 数据库隔离级别_彻底搞懂mysql数据库四种隔离级别,实验实战
  7. MATLAB--四种取整函数
  8. 74xx系列芯片说明
  9. 海康威视二次开发 python_海康威视面试python后端题
  10. JDBC学习笔记(2)---B站尚硅谷宋红康
  11. Scrapy框架以及scrapy-redis实现分布式爬虫
  12. [编程题]山寨金闪闪 (面试题)
  13. Android攻城狮数据存储之SharedPreferences
  14. 内网自建yum源和apt源(含各信创系统)
  15. 软件工程 | 第四章 系统设计
  16. php 图片印章_PHP实现中文圆形印章特效
  17. 下血本买的!1-3年的Android开发工程师看过来,挥泪整理面经
  18. Latex加批注 更改
  19. 从微软官网下载VS离线安装包的方法VS2017,VS2019
  20. Fedora 20 安装

热门文章

  1. 前端学习(1738):前端调试值之快速切换pc和手机端
  2. 前端学习(1390):多人管理项目10服务器认证
  3. 前端学习(1172):模板字符串
  4. spring学习(22):分层架构
  5. vue.js 引用背景图 background 无效的3种解决办法
  6. ES6之Module 的加载实现(1)
  7. 基于 opencv 的图像处理入门教程
  8. 换个角度看GAN:另一种损失函数
  9. git 为什么不能断点_跟我一起学docker(九)--持续系统集成了解下git
  10. python 面向对象 新式类和经典类