我根据本教程创建了一个带有aidl的远程服务的android应用程序:
http://www.anddev.org/remote_service_tutorial-t8127.html
我更改了服务,以便它向 logcat 打印一个计数器以显示它正在运行。
class Task implements Runnable {
private final ResultReceiver receiver2;
public Task(ResultReceiver receiver) {
receiver2 = receiver;
}
public void run() {
while (true) {
++counter;
Bundle b = new Bundle();
try {
System.out.println("Server counter: " + counter);
// get some data or something
b.putInt("results", counter);
receiver2.send(STATUS_FINISHED, b);
} catch (Exception e) {
b.putString(Intent.EXTRA_TEXT, e.toString());
receiver2.send(STATUS_ERROR, b);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// serviceHandler.postDelayed(this, 1000L);
Log.i(getClass().getSimpleName(), "Incrementing counter in the run method");
}
}
}
我想检查即使在主应用程序停止时服务是否继续运行,所以我使用 finish() 来“杀死”活动。即使活动消失,计数器也会连续打印到 logcat。
当我重新打开应用程序时。我单击开始按钮并使用以下代码检查服务是否正在运行(它是,我可以看到在 logcat 中运行的计数器),但它在运行服务的列表中不存在。
我想知道服务是否正在运行。如果它正在运行,那么我想将应用程序绑定到现有服务。如果没有,则应启动新服务。
公共类 ServiceTools { 私有静态字符串 LOG_TAG = ServiceTools.class.getName();
public static boolean isServiceRunning(Context context, String serviceClassName) {
final ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo info : manager.getRunningServices(Integer.MAX_VALUE)) {
String name = info.service.getClassName();
if (name.equals(serviceClassName)) {
return true;
}
}
return false;
}
}
现在我的问题是:为什么我的服务不在运行服务中?即使它不在正在运行的服务集合中,我也可以绑定到服务吗?