StopSelf不会停止我的服务

Dea*_*ely 13 service android

谷歌搜索,我已经看过很多次这个问题,过去几年这个论坛上的一些帖子.我从未见过有人得到直接答案.

我有一个前台服务,试图通过执行this.StopSelf()运行2小时后停止自己.我已经尝试过了,当它被束缚时,它还没有被束缚.在AVD和设备上.

它根本不起作用.这是Android中的错误吗?(运行2.3.3).

服务怎么能阻止自己?

and*_*per 25

如果您使用前台服务,则应致电:

stopForeground(true);

就像你开始一样startForeground.

stopSelf用于正常服务.前台服务很特别...... :)

顺便说一句,如果你的应用程序应该在旧设备上工作,你应该检查这里提供的兼容性代码.

  • @androiddeveloper调用stopForeground(true)确实*NOT*表示您的服务将被停止.它只是意味着它不再是在前台,它可以从那一刻起停止.但是如果你想强制停止,你还需要在stopForeground(true)之后调用stopSelf(). (4认同)
  • @Tiago一旦前台服务停止作为前台服务,它就变成了正常的后台服务,这意味着如果它开始,你可以使用"stopSelf"来停止它.希望现在更清楚了. (2认同)
  • 最好编辑你的答案,因为它听起来像你说要停止服务,在前台模式我们必须使用`stopForeground(true);`当它关闭前台模式时.所以它只是前景状态,它不是一些被称为前景的服务,它只是一个相同服务的状态 (2认同)

Roy*_*ley 11

我发现确定停止服务的唯一方法是使用:

android.os.Process.killProcess(android.os.Process.myPid());
Run Code Online (Sandbox Code Playgroud)

使用在stopSelf调用时尚未完成的工作线程可能导致此行为.如果您正在使用工作线程,请小心如何使用它 - 如果在执行该行之前未进行清理,则可能会泄漏内存.

  • 最佳答案.这是因为我的Timer线程.我只是调用timer.cancel(); 在stopSelf()之前; (2认同)
  • 它可以工作,但它完全杀死并停止应用程序:| (2认同)

Chu*_*.gu 7

我遇到了类似的问题.通过我的搜索发现:在其他活动的onCreate方法中我绑定了服务,但没有取消绑定 onDestory方法.修复后,当我调用stopSelf时,服务的onDestory方法就是调用.我希望它可以帮到你.

同时,我从Android管理文件中找到了基础.

服务既可以启动,也可以绑定连接.在这种情况下,只要系统启动或者使用Context.BIND_AUTO_CREATE标志有一个或多个连接,系统就会保持服务运行.一旦这些情况都不成立,就会调用服务的onDestroy()方法并有效终止服务.从onDestroy()返回时,应完成所有清理(停止线程,取消注册接收器).