gpt4 book ai didi

android - 如何使用观察者更新我的 UI?

转载 作者:行者123 更新时间:2023-11-29 00:49:26 28 4
gpt4 key购买 nike

我在“hello world”风格的应用程序中实现了一个简单的观察者模式。

我有 2 个按钮,它们在 Service 上调用 onStart()onDestroy()

onStart() 中,我注册了一个观察者,然后让我的观察者运行一个 for 循环,每秒调用一次 observe.update(),持续 10 秒。这又会在我的服务中调用 update() 方法。

我试图显示一些返回的虚拟数据,但出现以下错误:

11-26 23:21:12.829: ERROR/AndroidRuntime(676): FATAL EXCEPTION: Thread-8
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast.<init>(Toast.java:68)
at android.widget.Toast.makeText(Toast.java:231)
at com.jameselsey.observerpattern.LocalService.observe(LocalService.java:27)
at obs.Stub$1.run(Stub.java:49)
at java.lang.Thread.run(Thread.java:1096)

我在我的服务中做了以下事情:

public void observe(String message)
{
Context context = getApplicationContext();
Log.d("TEST", "Inside observe() on service, value is " + message);

Toast toast = Toast.makeText(context, message, Toast.LENGTH_SHORT);
toast.show();
}

经过一些研究,我似乎无法创建 Toast 消息,因为此方法未在主 UI 线程上运行。

无论如何我可以将 message 吐出到我的 UI 上吗?我只是想让它显示在 Activity 上,即使是常规的 textView 也可以。

最佳答案

服务不应该显示任何用户界面。唯一可接受的方法是显示 notification它可以通过 Intent 开始一个 Activity 。您的服务还可以使用 BroadcastReceiver 与您的 UI 通信或者它可以直接启动一个 Activity 。

如果您的 Activity 以某种方式在后台线程上被调用,您可以使用 runOnUiThread 让它在主线程上运行.您还应该熟悉 services一般而言。

关于android - 如何使用观察者更新我的 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289230/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com