Seb*_*wak 0 service android background bind android-activity
我正在阅读文档,花费的时间越多,我就会越来越困惑,这是实现我想做的最简单的方法.我想写一个简单的服务,它从按钮onClick开始并绑定到活动.当活动关闭并稍后再次启动时(不仅重新启动!),我想检查服务是否已经运行并绑定到它.我该怎么做?
谢谢
Vin*_*kla 12
"如果你开始startService(..)的机器人服务该服务将继续运行,直到你明确地调用stopService(..).有两个原因,一个服务可以由系统中运行.如果有人致电Context.startService()然后系统将检索服务(创建它,并在需要时调用其onCreate()方法),然后调用由客户提供的参数及其onStartCommand(意向,INT,INT)方法.此时将服务继续运行,直到Context.stopService()或stopSelf()被调用.注意Context.startService多个电话()不嵌套(尽管也导致他们中onStartCommand()多次调用对应的),所以无论多少次开始一旦调用了Context.stopService()或stopSelf(),服务就会停止;但是,服务可以使用它们的stopSelf(int)方法来确保在处理完启动意图之前不停止服务.
客户端还可以使用Context.bindService()来获取到服务的持久连接.如果服务尚未运行(在执行此操作时调用onCreate()),这同样会创建服务,但不会调用onStartCommand().客户端将接收服务从其onBind(Intent)方法返回的IBinder对象,允许客户端然后回调该服务.只要建立连接,服务将保持运行(客户端是否保留对服务的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;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8075 次 |
最近记录: |