Android Service 中全局变量无法工作

7
我很困惑为什么我不能从我的服务中访问全局变量。我可以从其他活动中轻松访问它们...
全局变量类:
public class Global extends Application {
private static final String TAG = "Global Class";

int test;     

public int getTest()
{
    return test;
}

主活动 我使用这个测试代码:

Global appState = ((Global)getApplication()); //Context());
appState.setTest(555);
Log.e("SETTEST",new Integer(appState.getTest()).toString());

结果为555

我在另一个活动中使用相同的代码:

Global appState = ((Global)getApplication()); //Context());
Log.e("SETTEST",new Integer(appState.getTest()).toString());

结果为 555

最终在我的服务中,我使用与上面相同的代码:

Global appState = ((Global)getApplication()); //Context());
Log.e("SETTEST",new Integer(appState.getTest()).toString());

我没有得到任何结果。

请帮帮我。我已经花了3个小时来尝试使用getApplication和getApplicationContext。

此外,清单文件如下:

...
<application android:icon="@drawable/signal" android:label="@string/app_ name" android:name="<absolute path>.util.Global">


<service
    android:name=".util.MyService"
    android:process=":MyService" 
    android:icon="@drawable/airplane"
    android:label="@string/service_name"
    >
</service>

我刚试着按照这篇帖子使用单例类,结果和上面一样出现了问题:

Android - 全局变量?


尝试使用共享首选项来传递它们...我希望它能够起作用。 - Arindam Mukherjee
你的服务是在本地运行还是远程运行?请发布你的服务清单。 - David Wasser
这只是简单的测试代码。我正在传递一个大型自定义对象数组……我不确定共享首选项是否是正确的方法-如果我错了,请纠正我。 - The Cure
好问题 - 它正在本地运行(至少我认为是这样)。我发布了该条目。 - The Cure
1个回答

17

你的服务是在远程运行,因为你拥有这个:

android:process=":MyService"

在服务的清单定义中。

这意味着它正在运行一个完全独立的进程。您不能使用静态变量共享全局变量。

如果您不需要您的服务在单独的进程中运行,只需移除“android:process”行即可。


他们应该警告人们,或者我错过了什么。 - guness
我曾经遇到过这个问题,现在已经完美地解决了。多进程运行应用程序有什么好处? - EspeH
@EspeH 我们使用多个进程来解决旧设备上单个进程的内存限制。通过将应用程序分割成多个进程,我们可以使用更多的内存。此外,如果您分割应用程序,您还可以获得一定程度的鲁棒性,因为如果其中一个部分崩溃,另一个部分会继续运行。这些只是使用多个进程的原因的两个例子。 - David Wasser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接