gpt4 book ai didi

android - 更新 UI/runOnUiThread/final 变量 : How to write lean code that does UI updating when called from another Thread

转载 作者:搜寻专家 更新时间:2023-11-01 08:13:10 25 4
gpt4 key购买 nike

当我发现像 WinForms 一样,Android 需要从主线程进行 UI 更新时,我一直在阅读 UI 更新(太糟糕了,我希望有人可以一劳永逸地解决这个恼人的问题) .

无论如何,我需要将其传递给 UI 线程。有些人建议使用 runOnUiThread 方法,如果不是那个令人恼火的“final”随后开始发挥作用,这可能会奏效。

我有一个接口(interface),其中的方法我无法更改。它看起来像这样:

@Override
public void connStateChange(ClientHandler clientHandler)

当我获得连接状态(网络)的变化时调用该方法。当我这样做时,我需要做一些事情,在这种情况下,它会向 TextView 添加一些文本。

所以我尝试了这个,但当然变量“clientHandler”不是最终的:

@Override
public void connStateChange(ClientHandler clientHandler) {

runOnUiThread(new Runnable()
{
public void run()
{
tv.append(clientHandler.getIP() + ", " + clientHandler.state.toString() + "\n");
if (clientHandler.state == State.Connected)
{
tv.append("Loginserver hittad");
}
}
});
}

在此示例中,我如何以一种简洁、高效的方式编写代码来更新 UI?我需要访问我所有的变量等...

最佳答案

试一试:

@Override 
public void connStateChange(ClientHandler clientHandler) {
final ClientHandler temporaryHander = clientHandler;
runOnUiThread(new Runnable() {
public void run() {
tv.append(temporaryHandler.getIP() + ", " + temporaryHandler.state.toString() + "\n");
if (temporaryHandler.state == State.Connected) {
tv.append("Loginserver hittad");
}
}
});
}

顺便说一句,如果您不是在方法中声明 anonim 类,而是在方法之外声明内部类,代码将变得更具可读性。将其视为模式命令。

更简洁和可重用代码的示例。

@Override 
public void connStateChange(ClientHandler clientHandler) {
final ClientHandler temporaryHander = clientHandler;
runOnUiThread(new MyRunnableCommand(temporaryHandler));
}

private class MyRunnableCommand implements Runnable {

private ClientHandler clientHandler;

public MyRunnableCommand(ClientHandler clientHandler) {
this.clientHandler = clientHandler;
}

@Override
public void run() {
tv.append(clientHandler.getIP() + ", " + clientHandler.state.toString() + "\n");
if (clientHandler.state == State.Connected) {
tv.append("Loginserver hittad");
}
}

}

虽然 Runnable 实现本身有点膨胀,但代码变得更加可重用和易于阅读。

关于android - 更新 UI/runOnUiThread/final 变量 : How to write lean code that does UI updating when called from another Thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619942/

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