我遇到了我的应用程序的问题,我似乎无法弄明白。
应用程序有一项服务,该服务在手机启动时启动,或者如果已经停止,则在主要活动运行之前启动,然后才能完成所有其他操作。
在活动的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()中返回的display值。
然而,当我在活动中加载任何代码时,它只会失败并返回除空值之外的任何内容。
我在屏幕上有一个调用DrawCanvas()的刷新按钮;再次,如果我点击刷新按钮,它就能正确获取所有变量并处理代码。
我不明白为什么第一次运行时没有加载变量,而是在点击刷新按钮时正确加载。
答案 0 :(得分:3)
绑定到服务是一种异步操作。您必须等到绑定完成后再调用服务方法。看看ServiceConnection.onServiceConnected()
方法。它有一个IBinder
参数。调用此方法时,可以将binder转换为其实际类型并调用其方法。
以下是开发绑定服务的指南:http://developer.android.com/guide/topics/fundamentals/bound-services.html
您应该仔细阅读并以类似的方式实施您的服务。