根据事件更新 UI

发布于 2024-10-20 10:07:28 字数 342 浏览 1 评论 0原文

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

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

更形象地说,我想执行以下操作

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

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

有什么建议吗?

I have a service which sends continously values to an activity through some custom event listeners.

Here everything works fine. Certain values are displayed in my activity as expected, but some others make the application to crash. This is because some of the incoming data is calculated inside a normal thread (that I cannot have access for changing it), and I know I have to use a handler here, but as far as I tried the app still crashing.

more graphically I would like to do the following

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

where val is calculated in a normal thread, but of course it makes crash the app when doing the setText.

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人海汹涌 2024-10-27 10:07:28

onPostExecute() 您可以更新 UI。

或使用 Activity.runOnUiThread(new Runnable() {
无效运行(){
// 做一些有趣的事情。
}
});

Use AsyncTask instead of Thread and in the onPostExecute() you can update the UI.

or use Activity.runOnUiThread(new Runnable() {
void run() {
// do something interesting.
}
});

流年已逝 2024-10-27 10:07:28

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

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

接收时将 int 解析为字符串

myTextView.post(new Runnable() {

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

        }
    });

,并在您的活动中注册一个接收器,该接收器将从传入意图中获取值,然后像这样调用处理程序来更新 UI ..请在每次 您向您的活动发送广播,它将更新用户界面..
不过上面提到的方式也是对的,但是如果你必须继续提供服务,那么就采用上面其他方式......

hey u can send a custom broadcast from your service like this

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

and register a receiver in your activity which will get the value from incoming intent and then call the handler like this to update the UI ..plese parse the int to string at receiving

myTextView.post(new Runnable() {

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

        }
    });

Every time you send a broadcast to your activity and it will update the ui ..
However the above mentioned way is also right but if you have to stay with service then go for this way else above......

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文