谷歌搜索,我已经看过很多次这个问题了,过去几年这个论坛的一些帖子。我从未见过有人得到直接答案。
我有一个前台服务,它通过执行this.StopSelf()运行2小时后试图阻止自己。我已经尝试过了,当它被束缚时,它还没有被束缚。在AVD和设备上。
它根本不起作用。这是Android中的错误吗? (运行2.3.3)。
服务如何自行停止?
答案 0 :(得分:21)
如果您使用前台服务,则应致电:
就像你用startForeground
开始一样。
stopSelf
旨在用于普通服务。前台服务很特别......:)
顺便说一下,如果您的应用应该在较旧的设备上运行,您应该检查提供的兼容性代码here。
答案 1 :(得分:10)
我发现确定停止服务的唯一方法是使用:
android.os.Process.killProcess(android.os.Process.myPid());
使用在调用stopSelf
时尚未完成的工作线程可能会导致此行为。如果您正在使用工作线程,小心如何使用它 - 如果在执行该行之前没有清理,则可能会泄漏内存。
答案 2 :(得分:7)
我遇到了类似的问题。通过我的搜索发现:在其他活动的onCreate方法中我绑定了服务,但没有取消绑定它onDestory方法。修复后,当我调用stopSelf然后服务的onDestory方法是调用。我希望它可以帮到你。
同时,我从Android管理文档中找到了基础。
答案 3 :(得分:3)
我有这个问题并且搜索我找到了这个帖子。我的应用程序的问题是,当服务调用stopSelf()时,绑定服务的前台活动仍在运行。调用stopSelf,但由于前台活动仍然受约束,服务不会被破坏。当我通过按回或进入主屏幕离开活动时,服务将被销毁。简而言之,当绑定前景活动时,stopSelf将不起作用。
答案 4 :(得分:3)
我遇到selfStop()
这个问题也没有用。
理解的主要理念是服务不会停止,
如果正在运行的循环仍在运行(例如while(mDoWhile)
)。
或者首先需要销毁/取消注册的任何其他问题。
所以要使stopSelf()
或stopService(intent)
有效,
在您的服务中实施onDestroy()
:
@Override
public void onDestroy()
{
// Unregistered or disconnect what you need to
// For example: mGoogleApiClient.disconnect();
// Or break the while loop condition
// mDoWhile = false;
super.onDestroy();
}
答案 5 :(得分:0)
我也遇到了同样的问题。
众所周知,Service
在应用UI Thread
上运行。因此,在您的服务后台运行Thread
并且正在调用stopSelf()
之前,它将无效。为此,您必须先停止Thread
,然后执行stopSelf()
。
停止使用Thread
Service
方法中的所有后台stopSelf()
肯定会有效。
答案 6 :(得分:0)
stopSelf
可能不会破坏服务,但是您可以stopService
使用应用程序上下文。但是请确保在调用服务内部的stopService
之前服务不会重新启动。
stopService(applicationContext, MyService::class.java)
答案 7 :(得分:0)
如果您同时调用了startService和bindService。则应先取消绑定Service,否则stopSelf将无法正常工作。
答案 8 :(得分:0)
我不得不终止前台服务的唯一方法是在清单中设置 stopwithtask=true
<service
android:name="my.package.MyForegroundService"
android:foregroundServiceType="location"
android:stopWithTask="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
</service>