我正在构建一个小应用程序,它现在可以很好地与服务和活动配合使用。
虽然,我试图在登录时将一些静态信息(比如服务是否已经启动?)保存到静态布尔值 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。然而,我日志中那个小测试的结果是“正在恢复:服务正在运行”,然后是“服务未运行”。
任何建议或问题都非常感谢。
根据要求: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>