如何在线程中使用我的全局Application类方法

时间:2012-03-23 13:47:57

标签: java android

我创建了一个扩展Application的类。 该类在加载应用程序时启动服务。 这个服务在一个循环中运行一个线程,需要更新应用程序全局变量抛出这个类中的getter \ setter方法:

public class AppLoader extends Application {
    private boolean isInternetOn, isGpsOn, isThereActivityRunning;
    private String results;

    public String getResults() {
        return results;
    }

    public void setResults(String results)  { }

    public boolean getIsInternetOn() {
        return isInternetOn;
    } 

    public void setIsInternetOn(boolean state) {
        this.isInternetOn = state;  
    }

    public boolean getIsGpsOn() {
        return isGpsOn;
    }

    public void setIsGpsOn(boolean state) {
        this.isGpsOn = state;   
    }

    public void onCreate() {
       super.onCreate();
       final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, ServerConnection.class);
       startService(intent);
       Log.d("ServiceStart", "ServerConnection.java Service has been started");
    }
}

我想在线程中使用getter setter方法,我无法理解如何操作。

帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您需要有一个可以发送消息的处理程序。这是跨线程进行通信的一种非常简单的方法。

答案 1 :(得分:0)

你做得非常奇怪。

根据经验,不要使用Application类,除非您非常了解框架,并确切知道您正在做什么以及您需要做什么它

您应该在其中一个活动中启动它,而不是在Application类中启动您的服务。除此之外,正如@CaseyB指出的那样,您应该使用其他一些机制在您的服务和应用程序的其余部分之间来回通信。您可以传递消息,实现AIDL接口等,​​而不是触摸变量......

答案 2 :(得分:0)

假设您在AndroidManifest.xml中正确指定了自己的自定义应用程序实现:

<?xml version="1.0" encoding="utf-8"?>
<manifest ... ...>
  <application android:name="com.example.AppLoader" ... ...>
... ...

如果您在android.content.Context(Activity,Service等)中,只需获取/转换自定义android.app.Application的实例,然后在此对象上调用您的工具作为公共方法:

boolean gpsOn = ((AppLoader) getApplication()).getIsGpsOn();
... ...
((AppLoader) getApplication()).setIsGpsOn("true");

如果要在线程中调用setter,则需要正确实现synchronized块。