我会直截了当地说这是一个任务问题。所以我不是在寻找答案,而是一个更好的答案。
我们有一个异步任务,它接受三个参数。 progress参数(即第二个参数是)是Runnable。
@Override
public void onProgressUpdate(Runnable ...runnableCommands) {
// TODO -- you fill in here with the appropriate call to
// the runnableCommands that will cause the progress
// update to be displayed in the UI thread.
}
我可以在doInBackGround()方法中使用publishProgress()调用此方法。
挑战在于将此runnable附加到UI Thread。我知道onProgressUpdate()可以访问UI线程,我们可以创建一个处理程序来添加到消息队列。但显然这是过分的。
有些人可以指导我做一个更好的方法,而不是创建一个处理程序
答案 0 :(得分:1)
如果您有一个Activity的引用,一种简单的方法是使用runOnUiThread(Runnable runnable)方法。查看源代码,很容易理解为什么:
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
如果您只引用视图,则可以使用post(Runnable runnable)方法。
两个状态的JavaDoc将在主线程上执行Runnable。
答案 1 :(得分:0)
根据文件
<强> onProgressUpdate 强>
可以从doInBackground(Params ...)调用此方法,以便在后台计算仍在运行时在UI线程上发布更新。
您可以在此处找到AsyncTask
链接基本上这个方法已经在UI线程上运行了。所以你不需要任何进一步的代码(通过handelrs或runOnUiThread())。
在您的情况下,您可以直接调用该Runnable的run
。