1

だから、私は活動とサービスを持っています。サービスは、メイン アプリケーションのスレッドをハングアップさせる多くの作業を行っているため、このサービスをリモート プロセス (マニフェストの :remote) で実行することにしました。サービスがメイン プロセスで動作している間はすべてが機能していましたが、リモート プロセスで奇妙なことが起こります。

サービスの onCreate メソッドの最後で、 SERVICE_RUNNING 変数の値をtrueに設定しました。1 行上の Log.d は、その値が実際にtrueであることを確認します。しかし、アクティビティから静的メソッド isRunning() (SERVICE_RUNTIME の値を返す) を呼び出すと、false が返されます。これが私のコードです:

サービス:

public class PlayService extends Service {
    private static Boolean RUNNING = false;

    @Override
    public void onCreate() {
        super.onCreate();
        SERVICE_RUNNING = true;
        Log.d("ctw", "onCreate() " + SERVICE_RUNNING); // "onCreate() true" in logcat
    }

    public static Boolean isRunning()
    {
        Log.d("ctw", "isRunning() " + SERVICE_RUNNING);
        return SERVICE_RUNNING;
    }
}

アクティビティ:

if(PlayService.isRunning())
{
    // executes when service is running and PlayService is not a remote process
} else {
    // executes always when PlayService is a remote process
}

前もって感謝します!

4

1 に答える 1

3

あなたは別々のプロセスを持っていると言いました。したがって、各プロセスには独自の PlayService クラスがロードされ、独自の RUNNING フラグのインスタンスがあります。異なるプロセス間で静的変数を介してデータを共有することはできません。

プロセスではなく、別のスレッドでサービスを実行します。

AIDL を使用してサービスと通信する以外のプロセスが本当に必要な場合。

于 2013-01-18T19:50:57.483 に答える