我已經創建了一個Android應用程序與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中運行)但它不存在在運行服務的列表中。
我想知道服務是否正在運行。如果它正在運行,那麼我想將該應用程序綁定到現有服務。如果不是,應該開始一項新的服務。
public class ServiceTools private static String 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;
}
}
現在我的問題:爲什麼我的服務沒有正在運行的服務?我可以綁定到服務,即使它不在正在運行的服務集合中?