谷歌搜索,我已经多次看到这个问题,过去几年在这个论坛上的一些帖子。我从未见过有人得到直接的答案。
我有一个前台服务,它在运行 2 小时后尝试通过执行 this.StopSelf() 自行停止。我在绑定和未绑定时都试过了。在 AVD 和设备上。
它根本行不通。这是Android中的错误吗?(运行 2.3.3)。
服务如何自行停止?
如果你使用前台服务,你应该调用:
就像你开始它一样startForeground
。
stopSelf
旨在用于正常服务。前台服务很特别... :)
顺便说一句,如果您的应用应该在旧设备上运行,您应该检查此处提供的兼容性代码。
我发现确定停止服务的唯一方法是使用:
android.os.Process.killProcess(android.os.Process.myPid());
此行为可能是由于使用调用时尚未完成的工作线程造成的stopSelf
。如果您正在使用工作线程,请注意如何使用它 - 如果您在执行该行之前不清理,您可能会泄漏内存。
我遇到了类似的问题。通过搜索发现:在其他活动的onCreate方法中,我绑定了服务,但没有取消绑定onDestory方法。修复后,当我调用stopSelf时,调用服务的onDestory方法。我希望它可以帮助你。
同时,我从Android gover文档中找到了base。
我有这个问题,搜索我找到了这个线程。我的应用程序的问题是,当服务调用 stopSelf() 时,绑定服务的前台活动仍在运行。调用了 stopSelf 但服务没有被破坏,因为前台活动仍然被绑定。当我通过按返回或转到主屏幕离开活动时,服务将被破坏。简而言之,当绑定前台活动时,stopSelf 将不起作用。
我也遇到了这个问题selfStop()
。
要理解的主要思想是服务不会停止,
如果正在运行的循环仍在运行(while(mDoWhile)
例如)。
或任何其他需要首先销毁/注销的问题。
所以要制作stopSelf()
orstopService(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();
}
我也面临同样的问题。
众所周知,它Service
运行在 App 的UI Thread
. 因此,除非您Thread
在服务的后台运行并且您正在调用stopSelf()
它,否则它将无法正常工作。为此,您必须先停止该操作Thread
,然后再执行stopSelf()
.
Thread
从您的Service
stopSelf()
方法中停止所有背景后,肯定会起作用。
我必须杀死前台服务的唯一方法是在清单中设置 stopwithtask=true
<service
android:name="my.package.MyForegroundService"
android:foregroundServiceType="location"
android:stopWithTask="true"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
</service>
如果你同时调用了 startService 和 bindService。你应该首先取消绑定服务,否则 stopSelf 将不起作用。
stopSelf
如果条件不利,可能不会破坏服务,但您可以stopService
使用应用程序上下文。但请确保在调用stopService
内部服务之前服务不会重新启动。
stopService(applicationContext, MyService::class.java)