2

このチュートリアルに基づいて、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;
 }

}

そして今、私の質問: 私のサービスが実行中のサービスにないのはなぜですか? サービスが実行中のサービス コレクションに含まれていなくても、サービスにバインドできますか?

4

1 に答える 1