如何安全地停止android上的服务并退出进程

如何安全地停止android上的服务并退出进程,android,service,Android,Service,我想实现一个后台服务,如。当网络可用时,启动该服务,否则,停止该服务,包括进程。(此应用没有活动)。下面是我如何实现它的 1.注册静态boardcastReceiver。侦听以下boardcast <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 3.我发现非常有趣。首先我们安装了应用程序。现在它没有运行。然后我打开WiFi。logcat输出一些东西,现在我非常确定服务正在运行。我在服务中创建了一个单独的

我想实现一个后台服务,如。当网络可用时,启动该服务,否则,停止该服务,包括进程。(此应用没有活动)。下面是我如何实现它的

1.注册静态boardcastReceiver。侦听以下boardcast

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
3.我发现非常有趣。首先我们安装了应用程序。现在它没有运行。然后我打开WiFi。logcat输出一些东西,现在我非常确定服务正在运行。我在服务中创建了一个单独的线程。当我禁用WiFi时,调用了服务回调方法onDestory。在这里我将销毁该线程我以前创建它是为了释放资源等等

一切看起来都正常工作。现在服务组件停止,没有活动。但进程仍处于活动状态我只需在onDestory中调用android.os.Process.killProcess(android.os.Process.myPid()),但这没有任何意义

4.服务内部:如果服务已被系统终止,则应自动重启。如果我自己停下来,它就不应该停下来

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG,"onStartCommand " + flags);
    return START_STICKY;
}
任何帮助都是适当的。祝你有愉快的一天

添加更多=======================================================

我阅读了android开发者关于进程和线程的文档。发现了这个。

空进程 不包含任何活动应用程序组件的进程。保持这种进程处于活动状态的唯一原因是为了缓存,以便在下次组件需要在其中运行时缩短启动时间。系统通常会杀死这些进程,以便在进程缓存和底层内核缓存之间平衡整个系统资源


无论如何,我知道当我停止服务时,进程将变为空进程,占用的内存更少,并且可能不处于活动状态。但是我仍然想杀死它。

您是否重写了服务类中的onDestroy()方法?该进程可能因为服务或活动而处于活动状态。有没有办法让你知道是哪一个?@zuseewekin是的,在onDestory()上方法我破坏了我创建的pervious线程on@Merlevede我只是在服务组件上进行了实例化。唯一活动的组件可能是静态boardcastreceiver。但是它没有场景。boardcastreceive生命周期只存在于Receive方法上。对吗?
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.d(TAG,"onStartCommand " + flags);
    return START_STICKY;
}