java - Android 服务未从设置中初始化变量

标签 java android

我的应用程序遇到了一个我似乎无法解决的问题。

该应用程序有一个服务,该服务会在手机启动时启动,或者如果手机已停止,则在主 Activity 运行时启动,然后再完成其他所有操作。

在 Activity 的 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 填充 getDisplay() 从 settings.xml 文件返回的显示值。

但是,当我在 Activity 中加载任何代码时,它只会失败并且只返回空值。

我在屏幕上有一个调用 DrawCanvas() 的刷新按钮;再次,如果我点击刷新按钮,它就能够正确获取所有变量并处理代码。

我不明白为什么变量在第一次运行 Activity 时没有加载,但当我点击刷新按钮时却正确加载。

最佳答案

绑定(bind)到服务是一个异步操作。您必须等待绑定(bind)完成,然后调用服务方法。看一下 ServiceConnection.onServiceConnected() 方法。它有一个 IBinder 参数。调用此方法时,您可以将 Binder 转换为其实际类型并调用其方法。

以下是开发绑定(bind)服务的指南:http://developer.android.com/guide/topics/fundamentals/bound-services.html

您应该仔细阅读它并以类似的方式实现您的服务。

关于java - Android 服务未从设置中初始化变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7196247/

相关文章:

java - 使用抽象/父类(super class)进行类的内部工作。访问修饰符的良好实践

安卓/NFC : Get Tag in onCreate() without new Intent

java - 以编程方式叠加图像

android - 如何导航到 android USB 大容量存储 Activity ?

java - 服务中按下电源按钮的事件监听器

java - 查找平均位置并删除其他位置:

java - 如何抑制警告 "Synchronization on a non-final field"

java - 用java编写接口(interface)的设计建议

java - 在java流中映射和应用

java - 在ArrayBlockingQueue中,为什么将final成员字段复制到本地final变量中?