2012-03-23 31 views
0

我創建了一個擴展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"); 
    } 
} 

我想使用的線程內,吸氣setter方法和我不能不懂如何去做。

幫助將不勝感激。

回答

1

您需要有一個可以發送消息的處理程序。這是跨線程進行通信的一種非常簡單的方法。

0

你正在做的事情很奇怪。

作爲一條經驗法則:不要使用Application類,除非你非常瞭解該框架,並且確切知道你在做什麼以及爲什麼你需要這樣做。

而不是在您的應用程序類中啓動您的服務,您應該在其中一個活動中啓動它。除此之外,正如@CaseyB指出的那樣,您應該使用其他一些機制在您的服務和其他應用之間來回交流。而非觸摸的變量,你可以傳遞信息,實現一個AIDL接口等...

+0

我其實之前做過。 我已經發送消息回來了,但是這個服務需要在應用程序加載後立即運行,並在停止時停止。 我需要此服務的結果可用於我所有的活動,而不僅僅是一個特定的活動。 如果你能幫助我在線程中使用應用程序方法,我將會非常棒。 – 2012-03-23 14:12:58

+0

因爲你以前做過並不意味着你應該這樣做。這是設計事物的不好方法。無論如何,應用程序永遠不會停止。把它放在你的主要活動中,否則這是一個可怕的破碎設計...... – 2012-03-23 14:43:42

0

假設你正確指定在AndroidManifest.xml你自己定製的應用程序執行:

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

如果你是一個Android的內.content.Context(活動,服務等),簡單地獲取/投你定製android.app.Application的一個實例,然後調用無論您實現和公共方法對該對象:

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

如果您呼叫setter在線程中,您需要執行syn慢慢地阻塞。

相關問題