2011-08-25 26 views
1

我遇到了我的應用程序出現問題,我似乎無法弄清楚。Android服務未初始化設置中的變量

該應用程序具有一項服務,該服務在手機啓動時啓動,或者如果已停止,則在主要活動在所有其他操作完成之前運行時啓動。

在活動的onCreate我有:

serviceIntent.setClass(this, Service.class); 
bindService(serviceIntent, mConnection, Context.BIND_AUTO_CREATE); 
startService(serviceIntent); 
WriteDisplay(); 

public void WriteDisplay(){ 
TextView t = (TextView)findViewById(R.id.tv1); 
String strdisplay = Service.getDisplay(); 
t.setText(strdisplay); 
} 

在服務我有:

@Override 
public void onCreate(){ 
    super.onCreate(); 
    GetSettings(); 

} 
public static String getDisplay() { 
    return display; 
} 

的getSettings填充,其由settings.xml文件返回在getDisplay()的顯示的值。

但是,當我加載活動中的任何代碼時,它只會失敗並返回空值。我有一個調用DrawCanvas()的屏幕上的刷新按鈕;再次,如果我點擊刷新按鈕,它能夠正確地獲取所有變量並處理代碼。

我不明白爲什麼變量沒有在第一次運行時加載,但是當我點擊刷新按鈕時加載正確。

回答

3

綁定到服務是異步操作。您必須等到綁定完成後再調用服務方法。看看ServiceConnection.onServiceConnected()的方法。它有一個IBinder參數。當這個方法被調用時,你可以將binder綁定到它的實際類型並調用它的方法。

這裏有一個指導發展的約束服務:http://developer.android.com/guide/topics/fundamentals/bound-services.html

您應仔細閱讀並以類似的方式實現你的服務。

+0

因此,如果我理解正確,我應該在示例中覆蓋的onServiceConnected方法的末尾調用WriteDisplay? – Sorean

+0

是的,它不能是「靜態」。它必須是'Binder'子類的實例方法。你必須用'IBinder'參數來調用它。 – Michael

+0

非常感謝! – Sorean