gpt4 book ai didi

java - 从服务更新 UI 的更有效方法?

转载 作者:行者123 更新时间:2023-11-30 11:13:59 26 4
gpt4 key购买 nike

我目前正在编写我的第一个 Android 应用程序,它将对游戏服务器执行 ping 操作,检查它们是否在线,并在用户离线时提醒用户。该应用程序还在主要 Activity 中显示每个服务器的状态。为了做到这一点,我做了一个无限期运行的服务,循环遍历服务器对象的静态列表(它是静态的,因为永远只有一个服务实例),ping 服务器,然后将服务器状态更改为在线/离线。对于主要 Activity ,我创建了一个计时器,它也循环遍历该列表,检查服务器的状态,然后将服务器的 TextView 更改为在线/离线。我制作一个单独的计时器来更新 UI 的原因是因为我只希望它在主要 Activity 可见时运行。有更好的方法吗?

最佳答案

如果您只想在主 Activity 可见时运行它,请实现一个方法来执行此操作。示例:How to detect when an Android app goes to the background and come back to the foreground

然后对于“服务器对象的静态列表”,我会小心处理静态内容,这通常不是一个好主意(而且访问静态成员“技术上更慢”)。

对于“计时器”,不要那样做。相反,让您的服务广播一个 Intent (或者如果您绑定(bind)它,让您的 Activity 实现一个自定义接口(interface),服务器可以在典型的观察者/监听器模式中与之交谈)。

例如:

public interface ServerStatusListener {
void onServerIsUp();
void onServerIsDown();
}

如果你走 Broadcast Intent 路线,在你的基础 Activity 中有一个小的 Broadcast Receiver 来监听这个:

public class ServerStatusReceiver extends BroadcastReceiver {
public void onReceive(final Context context, final Intent intent) {
// analyze the intent and determine what happened
// pseudo code
if (intent.getBooleanExtra("com.your.app.EXTRA_NETWORK_IS_UP", false) ) {
serviceIsUp();
} else {
serviceIsDown();
}
}
}

你明白了。两种方法都可以。不同的概念。请记住 onReceive 方法已经在 UI 线程上运行,不要在那里执行昂贵的操作。

阅读有关服务、广播接收器等的 Android 文档。这是很好的 Material ,如果您要成为 Android 开发人员,您会想知道这些。

玩得开心!

关于java - 从服务更新 UI 的更有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26131275/

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