因此,我有一项活动和一项服务。服务正在做很多工作,使我的主应用程序的线程挂起,因此我决定在一个远程进程(清单中的:remote)中运行此服务。尽管服务在主流程中运行时一切正常,但在远程流程中却发生了奇怪的事情。

在服务的onCreate方法结尾,我将SERVICE_RUNNING变量的值设置为true。上面一行Log.d确认,它的值确实是正确的。但是,当我从活动中调用静态方法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
}


提前致谢!

最佳答案

您说您有单独的流程。因此,每个进程都具有加载的自己的PlayService类和RUNNING标志的实例。您不能通过静态变量在不同进程之间共享数据。

在单独的线程(而不是进程)中运行服务。

如果您真的想要不同的流程,而不是使用AIDL与服务进行通信。

10-08 16:09