我目前有一个服务,运行良好,当我启动它,但是当我试图阻止它使用stopService方法的onDestroy方法不会被调用。

这里是我用来停止服务的代码

stop_Scan_Button =(Button)findViewById(R.id.stopScanButton);

stop_Scan_Button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Log.d("DEBUGSERVICE", "Stop Button pressed"); Intent service = new Intent(CiceroEngine. CICERO_SERVICE); releaseBind(); Log.d("Stop_Scan_Button", "Service: " + service.toString()); stopService(service); Log.d("Stop_Scan_Button", "Service should stop! "); } });

我正确地认为,当使用stopService时,它调用服务的onDestroy方法? 当我按停止扫描button时,我的服务中的onDestroy()方法不会被调用。

还有什么我错过了,我应该停止服务?

编辑:添加onServiceConnected()得到调用时stopService运行,而不是onServiceDisconnected() ,为什么会发生这种情况?

编辑: 添加更多信息关于绑定

我在onCreate()方法中调用bindService,然后使用releaseBind()方法解除绑定服务。

这是该方法的代码:

public void releaseBind(){ unbindService(this); }

所以我认为解绑不是我的问题?

我将猜测你有一个方法调用releaseBind()意味着你以前在这个服务上调用了bindService() ,而releaseBind()调用了unbindService() 。 如果我的猜测不正确,请忽略此答案。

所有bindService()调用都有相应的unbindService()调用后,服务将closures。 如果没有绑定的客户端,那么当且仅当有人在服务上调用startService()时,服务还需要stopService() 。

所以,这里有一些可能性:

你仍然有绑定的客户端(例如,其他活动),在这种情况下,你不能停止服务,直到他们解除绑定

由于unbindService()和stopService()都是asynchronous的,所以在某些情况下,如果从ServiceConnection的onServiceDisconnected()方法中调用stopService()

另外,请记住,被销毁的服务的确切时间取决于Android,可能不是立即的。 所以,举例来说,如果你依靠onDestroy()来让你的服务停止正在完成的工作,考虑使用另一个触发器(例如,通过服务绑定接口调用stopDoingStuff()方法的活动)。

你所有的绑定closures了吗?

服务可以以两种方式使用。 这两种模式并不完全分开。 您可以绑定到使用startService()启动的服务。 例如,背景音乐服务可以通过调用startService()来启动,该Intent对象标识要播放的音乐。 只有在以后,当用户想要对播放器进行一些控制或者获得关于当前歌曲的信息时,可以通过调用bindService()来build立与服务的连接。 在这种情况下,stopService()不会实际上停止服务, 直到最后一个绑定closures

对于最近的答案,海先生抱歉,但据我所知,我已经成功地停止了这个代码中的服务:你可以在这里查看链接 。

public void onClick(View src) { switch (src.getId()) { case R.id.buttonStart: Log.d(TAG, "onClick: starting srvice"); startService(new Intent(this, MyService.class)); break; case R.id.buttonStop: Log.d(TAG, "onClick: stopping srvice"); stopService(new Intent(this, MyService.class)); break; } }

并在服务类:

public class MyService extends Service { private static final String TAG = "MyService"; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); Log.d(TAG, "onCreate"); } @Override public void onDestroy() { Toast.makeText(this, "My Service Stopped", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy"); } @Override public void onStart(Intent intent, int startid) { Toast.makeText(this, "My Service Started", Toast.LENGTH_LONG).show(); Log.d(TAG, "onStart"); } }

android stop 服务,当调用stopService方法时服务不会停止相关推荐

  1. win10服务器文件停止,解决win10提示“当OLE服务于对象服务器通讯时,后者已停止”的方法...

    win10是windows中最新的系统,在经过多次的更新之后终于很多的系统故障都被解决了,现在win10中出现的大多数故障都是我们的用户设置不当造成的.最近在使用win10打开图片的时候总是会遇到错误 ...

  2. 如何关闭线程池?会创建不会关闭?调用关闭方法时线程池里的线程如何反应?

    前言 相信大家在面试的时候经常会遇到「线程池」相关的问题,比如: 什么是线程池?线程池的优点? 有哪几种创建线程池的方式? 四种创建线程池的使用场景? 线程池的底层原理? 线程池相关的参数,比如Cor ...

  3. 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误。hr = 0x8007045b, 系统正在关机。

    服务器有时自动重启: 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误.hr = 0x8007045b, 系统正在关机. 在服务中是:Volume Shadow Copy和 ...

  4. 子类调用父类方法时,方法中的变量用谁的

    public class T1 {private int a=6;public void ha(){System.out.println(this.a);} } public class T2 ext ...

  5. ios手机端 表单input调用focus方法时,光标不显示,但软键盘会弹出来,可以修改内容,需要修改内容后光标才显示

    功能: ios表单验证时,比如 输身份证号,失焦后验证身份证,如果不合法,就让光标跳到对应的输入框,我是不合法就调用focus方法,完了会跳过去,但是ios有个bug,它确实会定位到对应的输入框,而且 ...

  6. android调用js函数方法,Android和JavaScript相互调用的方法

    本文实例讲述了Android和JavaScript相互调用的方法.分享给大家供大家参考,具体如下: Html页面和Java代码结合的方式一般用在界面经常被更改 的情况下,可以讲html放在网络中,软件 ...

  7. android oncreate调用,Android app启动activity并调用onCreate()方法时都默默地干了什么?...

    在AndroidManifest.xml文件中的元素中有这么两句: 当写好的应用发布到手机上之后,当双击"APP"应用的图标时,系统会将这个点击时间包装成一个Intent,该Int ...

  8. Android之什么时候调用onSaveInstance方法的时候(为什么按Home键盘会调用,按Back不调用)

    1.函数介绍   1).onCreate(Bundle savedInstanceState) 方法 Activity 创建时回调 : 该方法会自动传入一个 Bundle 对象, 该 Bundle 对 ...

  9. 坚持学习WF(8):本地服务之调用外部方法

    WF提供了一组核心服务,例如在SQL 数据库中存储工作流实例的执行详细信息的持久性服务,计划服务,事务服务和跟踪服务.除了这些WF也提供了另外一种服务,叫做Local Service也可以叫做Data ...

  10. android与H5交互调用js方法无效问题

    正常的调用js方法很简单,只有一句话 mWebView.loadUrl("javascript:do()"); do();是js提供的方法名 但是调用之后发现无效,不禁在想就这么一 ...

最新文章

  1. 远程办公,为什么一直不被公司普遍接受?
  2. 科普丨你不得不知道的20个大数据术语
  3. document 获得元素节点,属性节点,文本节点。
  4. (8)操作系统安全机制之二
  5. 手机模拟位置实现精准位置营销效果分析
  6. CocosPods 引入项目,哪些文件需要上传到服务器呢?
  7. 使用代码片段的正确姿势,打造高效的vscode开发环境
  8. JDK 6中新增的Java Console类功能概览
  9. 软件工程第二次课课堂总结
  10. 内容为王时代“内卷”急,安全风控一旦疏漏很要命!
  11. QT学习之文件读写操作
  12. [论文阅读] (16)Powershell恶意代码检测论文总结及抽象语法树(AST)提取
  13. 利用计算机属性将字符串逆序输出,字符串逆序的各种实现算法
  14. PC 护眼模式(凑合用)
  15. dedecms二次开发总结 变量参数
  16. lonlife oj 1029 - Bob and Alice are playing factors
  17. 5万款Lr顶级调色预设合集,精心整理,分类清晰,摄影师调色师必备素材,够用一辈子
  18. 【论文翻译】基于分层关注和时间RNN的动态异构网络链路预测建模
  19. 如何确定IP在同一网段
  20. Python是什么?一篇短文带你了解Python

热门文章

  1. 倪海厦天纪笔记16_倪海厦-天纪16
  2. 多目标优化——帕累托最优Pareto
  3. 半年总结——思想的转变
  4. 未能完成该操作pkdownloaderror错误8_国家励志奖学金申请和审批操作指南
  5. GUI GUIDER 应用笔记
  6. AiHi+翼次元学院儿童自然感知实践“几米小甜田”+中韧开智“优慧码”| Wit++
  7. Maven 部署私服依赖
  8. UG二次开发GRIP成品工具
  9. 数据库系统概念笔记——第4章 中级SQL
  10. 金山词霸取不了Adobe Reader的词?