如何使用 Android 处理程序更新 UI 线程中的 TextView?
Posted
技术标签:
【中文标题】如何使用 Android 处理程序更新 UI 线程中的 TextView?【英文标题】:How to use an Android Handler to update a TextView in the UI Thread? 【发布时间】:2013-03-19 02:55:43 【问题描述】:我想从 android 应用程序中的异步任务更新TextView
。使用Handler
执行此操作的最简单方法是什么?
有一些类似的问题,例如:Android update TextView with Handler,但是例子很复杂,似乎没有答案。
【问题讨论】:
【参考方案1】:有几种方法可以更新您的 UI 并从 UI 线程外部修改 View
,例如 TextView
。 Handler
只是一种方法。
这是一个示例,它允许单个Handler
响应各种类型的请求。
在类级别定义一个简单的Handler
:
private final static int DO_UPDATE_TEXT = 0;
private final static int DO_THAT = 1;
private final Handler myHandler = new Handler()
public void handleMessage(Message msg)
final int what = msg.what;
switch(what)
case DO_UPDATE_TEXT: doUpdate(); break;
case DO_THAT: doThat(); break;
;
在您的一个函数中更新 UI,该函数现在位于 UI 线程上:
private void doUpdate()
myTextView.setText("I've been updated.");
在您的异步任务中,向Handler
发送消息。有几种方法可以做到这一点。这可能是最简单的:
myHandler.sendEmptyMessage(DO_UPDATE_TEXT);
【讨论】:
Handler class should be static otherwise memory leaks might occur
警告呢?
请找到 Blog post 和这个答案 (***.com/questions/11407943/…) 以了解更多信息
我在这里推荐 weakHandler 以避免泄漏。 github.com/badoo/android-weak-handler【参考方案2】:
您也可以通过这种方式从后台线程更新 UI 线程:
Handler handler = new Handler(); // write in onCreate function
//below piece of code is written in function of class that extends from AsyncTask
handler.post(new Runnable()
@Override
public void run()
textView.setText(stringBuilder);
);
【讨论】:
以上是关于如何使用 Android 处理程序更新 UI 线程中的 TextView?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Android开发中用AsyncTask异步更新UI界面