静态变量没有正确返回?

时间:2012-09-14 12:41:12

标签: java android

我正在构建一个小应用程序,它现在可以很好地处理服务和活动。

虽然,我试图在登录时保存一些静态信息(比如服务已经启动了吗?)到静态布尔值isRunning。它将在onCreate()上设置为true,但是当我稍后从活动中调用它时,它总是返回false。

来自服务:

public static boolean isRunning = false;

public void onCreate() {
        super.onCreate();
    isRunning = true;
}

有谁知道为什么这不起作用?我已经尝试使用一些日志来弄清楚发生了什么,但我似乎无法弄明白。

来自活动

public void onResume() {
        super.onResume();
        if(mIsBound) {
            Log.i(LOG_TAG, "Resuming: Service is running");
            if(Service.isRunning) {
                Log.e(LOG_TAG, "SERVICE IS RUNNING!");
            } else {
                Log.e(LOG_TAG, "SERVICE IS NOT RUNNING!");
            }
        } else {
            Log.i(LOG_TAG, "Resuming: Service NOT running");
        }
        StopCheck.setChecked(mIsBound);
    }

mIsBound是绑定到服务的活动所创建的(我希望它重新绑定,但这似乎是不可能的),并且它在当前状态下是可靠的。但不是在那个活动之外,这就是我想要使用静态变量的东西。如果mIsBound等于true,Service.isRunning应返回true。然而,我的日志中的那个小测试的结果是“恢复:服务正在运行”,然后是“服务不运行”。

非常感谢任何建议或问题。

AS REQUESTED:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.somnu.ServiceTest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".Login"
            android:debuggable="true"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".Activity"
            android:debuggable="true"
            android:label="@string/app_name" >
        </activity>

        <service
            android:name=".Service"
            android:process=":Service" >
        </service>

    </application>

</manifest>

1 个答案:

答案 0 :(得分:2)

删除 android:process

  

运行服务的进程的名称。通常,应用程序的所有组件都在为应用程序创建的默认进程中运行。它与应用程序包具有相同的名称。元素的process属性可以为所有组件设置不同的默认值。但是组件可以使用自己的流程属性覆盖默认值,允许您跨多个流程分布应用程序。

If the name assigned to this attribute begins with a colon (':'), a new process, private to the application, is created when it's needed and the service runs in that process. If the process name begins with a lowercase character, the service will run in a global process of that name, provided that it has permission to do so. This allows components in different applications to share a process, reducing resource usage.