java - 如何从 Runnable 更新 UI?

标签 java android multithreading android-fragments

我需要从 runnable 更新 ui。我的逻辑如下。 我从 fragment 生命周期的 onCreate 开始运行。可运行实例负责请求网络。问题是我不知道如何在可运行实例从网络获取数据后更新 fragment 。

在 CustomFragment.java 的 fragment 中启动 runnable 的代码。

public void onCreate(Bundle savedInstanceState) {
    Log.d(DEBUG_TAG, "onCreate");
    super.onCreate(savedInstanceState);

    accountMgr.requestAccountInfo();

}

在 AccountManager.java 中开始运行的代码

/**
 * request Account info from server
 */
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public void requestAccountInfo() {
    Account act = getCurrentAccount();
    Thread t = new Thread(new RequestAccountInfoTask(act));
    t.start();
}

/**
 * automatically update Account info, like space usage, total space size, from background.
 */
 class RequestAccountInfoTask implements Runnable {

    private Account account;

    public RequestAccountInfoTask(Account account) {
        this.account = account;
    }

    @Override
    public void run() {
        doRequestAccountInfo(account);

    }
}

最佳答案

runOnUiThread() 需要 Activity 引用。还有其他选择。您不需要 Activity 引用您的 Thread。您始终可以使用主循环程序获取 UI 处理程序。传递其他参数(例如您的界面)以在完成您的任务后更新 fragment 。

class RequestAccountInfoTask implements Runnable {

    private Account account;
    private Handler mHandler;
    public RequestAccountInfoTask(Account account) {
        this.account = account;
        mHandler = new Handler(Looper.getMainLooper());
    }

    @Override
    public void run() {
        doRequestAccountInfo(account);
        //use the handler
    }
}

您在实例化的 Handler 上运行的任何内容都将在 UI 线程上运行。

当然,使用runOnUiThread() 是完全合理的。

关于java - 如何从 Runnable 更新 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27415236/

相关文章:

java - 安卓工作室 Gradle : Execute static Java Method (Migration from ANT to Gradle)

java - 实现通用顶点和边类

java - 带有 API 21 的 Snackbar

javascript - 如何创建类似 Twitter 的个人资料布局?

android - OpenGL ES 2.0 : Is there a workaround for missing texture access in vertex shader?

c - 正确学习C : yes or no?

Java GUI 不变

Java 相当于 'openssl rsautl -verify -out'

java - Chef Server 的任何组件都使用 Java 吗?

javascript - JavaScript 线程和 Silverlight UI 线程之间是什么关系?