java 关闭时_java – 活动关闭时服务停止
我已经阅读了一些与这个问题相关的答案,它们似乎都是一样的:
“使用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 – 活动关闭时服务停止相关推荐
- java帧结构_Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)...
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...
- java 安卓权限_java – Android运行时权限 – 如何实现
Android Developer Documentation给出了在运行时请求权限的示例: // Here, thisActivity is the current activity if (Con ...
- java 自定义 钩子_Java添加关闭钩子里面的方法
在我的代码中,我使用CompletionService和ExecutorService来启动一堆Thread来执行某些任务(这可能需要很长时间) . 所以我有一个创建ExecutorService和C ...
- java wsimport 调用_java – 使用wsimport时的安全性异常
我想从wsdl文件生成存根文件,该文件可通过带有自签名证书的ssl连接访问. 当我在ant中执行此操作时,我收到此错误: generate-from-wsdl: [exec] parsing WSDL ...
- java socket同步_Java socket客户端与服务端同步通信实例
工作中没涉及有关JAVA SOCKET编程的实际经历,但理论大概了解.想正明一下自已的对JAVA SOCKET理解写个通信TEST,通过TEST验证了基本与理论相近.下面是TEST SRC CODE ...
- java短链接_Java 网址短链接服务原理及解决方案
一.背景 现在在各种圈的产品各种推广地址,由于URL地址过长,不美观.不方便收藏.发布.传播以及各种发文字数限制等问题,微信.微博都在使用短链接技术.最近由于使用的三方的生成.解析短链接服务开始限制使 ...
- java webservice 服务器_java如何写webservice服务端
展开全部 Java 中的 Web Service 分为基于 SOAP 的和基于 REST 的两种,下面简单说一个基于 SOAP 的例子.要使用 JDK6u4 之后e69da5e6ba903231313 ...
- java timertask 销毁_java中TimerTask 如何才能停止呢
java中TimerTask 如何才能停止呢 关注:99 答案:2 mip版 解决时间 2021-02-05 01:59 提问者野战女神 2021-02-04 07:50 destroy中的can ...
- java android对话框_java - 防止Android活动对话框关闭外部触摸
18个解决方案 327 votes 要防止对话框在按下后退键时被解除,请使用此选项 dialog.setCancelable(false); 并且为防止对话框在外部触摸时被解雇,请使用此功能 dial ...
最新文章
- boost::local_time模块实现创建各种dst_calc_rule的测试程序
- travis-ci_使用Travis-CI的SpringBoot应用程序的CI / CD
- java aqua和metal_Java工具集介绍9_16
- 详解TCP和UDP数据段的首部格式
- Security+ 学习笔记1 恶意软件
- mysql 数据库隔离级别_彻底搞懂mysql数据库四种隔离级别,实验实战
- MATLAB--四种取整函数
- 74xx系列芯片说明
- 海康威视二次开发 python_海康威视面试python后端题
- JDBC学习笔记(2)---B站尚硅谷宋红康
- Scrapy框架以及scrapy-redis实现分布式爬虫
- [编程题]山寨金闪闪 (面试题)
- Android攻城狮数据存储之SharedPreferences
- 内网自建yum源和apt源(含各信创系统)
- 软件工程 | 第四章 系统设计
- php 图片印章_PHP实现中文圆形印章特效
- 下血本买的!1-3年的Android开发工程师看过来,挥泪整理面经
- Latex加批注 更改
- 从微软官网下载VS离线安装包的方法VS2017,VS2019
- Fedora 20 安装