从和事件更新UI

时间:2011-03-05 03:59:23

标签: android handler

我有一个服务,它通过一些自定义事件监听器不断向活动发送值。

这里一切正常。某些值按预期显示在我的活动中,但是其他一些值会使应用程序崩溃。这是因为一些传入的数据是在普通线程内计算的(我无法访问它来更改它),我知道我必须在这里使用处理程序,但据我尝试的应用程序仍然崩溃。

更加图形化我想做以下

onValuesChanged(float val) { 
  myTextView.setText( Float.toString(val) )
} 

其中val是在普通线程中计算的,但当然在执行setText时会使应用程序崩溃。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

使用AsyncTask代替线程,onPostExecute()可以更新用户界面。

或使用Activity.runOnUiThread(new Runnable(){     void run(){         //做一些有趣的事     } });

答案 1 :(得分:1)

嘿,你可以像这样从你的服务发送自定义广播

    Intent mintent = new Intent();
    mintent.setAction("com.action");
    mintent.putExtra("name", "value");
    sendBroadcast(mintent);

并在您的活动中注册一个接收器,它将从传入的intent中获取值,然后像这样调用处理程序来更新UI ..请在接收时将int解析为字符串

myTextView.post(new Runnable() {

        public void run() {
        myTextView.setText( Float.toString(val) )

        }
    });

每当您向您的活动发送广播时,它都会更新ui .. 然而,上面提到的方式也是正确的,但如果你必须继续服务,那么就这样去......