我有一个服务,它通过一些自定义事件监听器不断向活动发送值。
这里一切正常。某些值按预期显示在我的活动中,但是其他一些值会使应用程序崩溃。这是因为一些传入的数据是在普通线程内计算的(我无法访问它来更改它),我知道我必须在这里使用处理程序,但据我尝试的应用程序仍然崩溃。
更加图形化我想做以下
onValuesChanged(float val) {
myTextView.setText( Float.toString(val) )
}
其中val是在普通线程中计算的,但当然在执行setText时会使应用程序崩溃。
有什么建议吗?
答案 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 .. 然而,上面提到的方式也是正确的,但如果你必须继续服务,那么就这样去......