我正在构建一个小应用程序,它现在可以很好地处理服务和活动。
虽然,我试图在登录时保存一些静态信息(比如服务已经启动了吗?)到静态布尔值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>
答案 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.