Android 安卓后台服务

Android 安卓后台服务,android,service,android-activity,background,bind,Android,Service,Android Activity,Background,Bind,我在阅读文档,花的时间越多,我就越困惑什么是完成我想做的事情的最简单方法。我想编写一个简单的服务,它从ButtonOnClick开始并绑定到活动。当活动关闭并稍后再次启动(不仅仅是重新启动!)时,我想检查服务是否已经在运行并绑定到它。我该怎么做 谢谢“如果您使用startService(..)启动android服务,该服务将一直运行,直到您显式调用stopService(..)。系统可以运行服务有两个原因。如果有人调用Context.startService(),则系统将检索该服务(创建并调用其

我在阅读文档,花的时间越多,我就越困惑什么是完成我想做的事情的最简单方法。我想编写一个简单的服务,它从ButtonOnClick开始并绑定到活动。当活动关闭并稍后再次启动(不仅仅是重新启动!)时,我想检查服务是否已经在运行并绑定到它。我该怎么做

谢谢

“如果您使用startService(..)启动android服务,该服务将一直运行,直到您显式调用stopService(..)。系统可以运行服务有两个原因。如果有人调用Context.startService(),则系统将检索该服务(创建并调用其onCreate()方法),然后使用客户端提供的参数调用其onStartCommand(Intent,int,int)方法。此时服务将继续运行,直到调用Context.stopService()或stopSelf()。请注意,对Context.startService()的多个调用不会嵌套(尽管它们确实会导致对onStartCommand()的多个相应调用),因此无论服务启动多少次,只要调用了Context.stopService()或stopSelf(),服务都会停止;但是,服务可以使用其stopSelf(int)方法确保在处理启动意图之前不会停止服务

客户端还可以使用Context.bindService()获取到服务的持久连接。如果服务尚未运行(执行此操作时调用onCreate()),则同样会创建该服务,但不会调用onStartCommand()。客户端将接收该服务从其onBind返回的IBinder对象(Intent)方法,然后允许客户端调用该服务。只要建立连接,该服务将保持运行(无论客户端是否保留对该服务的IBinder的引用)。通常返回的IBinder用于已在aidl中编写的复杂接口

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

您可以检查服务是否正在运行:

public boolean isServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if ("com.example.app.ServiceClassName".equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}
“如果使用startService(..)启动android服务,该服务将一直运行,直到显式调用stopService(..)。系统可以运行服务有两个原因。如果有人调用Context.startService(),则系统将检索该服务(创建该服务并在需要时调用其onCreate()方法)然后使用客户端提供的参数调用其onStartCommand(Intent,int,int)方法。此时服务将继续运行,直到调用Context.stopService()或stopSelf()。请注意,对Context.startService()的多次调用不会嵌套(尽管它们会导致对onStartCommand()的多次相应调用),因此,无论服务启动多少次,只要调用Context.stopService()或stopSelf(),服务都将停止;但是,服务可以使用其stopSelf(int)方法确保在处理启动意图之前不会停止服务

客户端还可以使用Context.bindService()获取到服务的持久连接。如果服务尚未运行(执行此操作时调用onCreate()),则同样会创建该服务,但不会调用onStartCommand()。客户端将接收该服务从其onBind返回的IBinder对象(Intent)方法,然后允许客户端调用该服务。只要建立连接,该服务将保持运行(无论客户端是否保留对该服务的IBinder的引用)。通常返回的IBinder用于已在aidl中编写的复杂接口

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

您可以检查服务是否正在运行:

public boolean isServiceRunning() {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if ("com.example.app.ServiceClassName".equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

在这种情况下,我认为您只需要使用
希望这对您有所帮助

在这种情况下,我认为您只需要使用
希望这有助于

在android中执行服务与活动的实际绑定,您需要扩展服务类并将服务绑定到您的活动(并可能使用android的AIDL执行活动与服务之间的通信)。但是,在您的示例中,听起来您可以在活动中使用单独的线程。请使用runnable或AsyncTask。一旦用户单击触发onClick的按钮,请将应用程序中的静态布尔值设置为true。然后,在重新进入活动时,只需检查该布尔值是否为true如果为true,则再次触发线程。

要在android中执行服务与活动的实际绑定,您需要扩展服务类并将服务绑定到您的活动(并可能使用android的AIDL执行活动与服务之间的通信)。但是,在您的示例中,听起来您可以在活动中使用单独的线程。请使用runnable或AsyncTask。一旦用户单击触发onClick的按钮,请将应用程序中的静态布尔值设置为true。然后,在重新进入活动时,只需检查该布尔值是否为true和