gpt4 book ai didi

android - 如何让Asynctask以不同的方式更新UI

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:25 25 4
gpt4 key购买 nike

这是我在使用 Asyntask 时经常遇到的问题。联系 UI 线程的方法是调用 publishProgress() & 这个方法接受一个只有一个 TYPE 参数的数组。

在后台运行的执行复杂计算的线程可能需要使用不同类型 对象在不同点更新 UI。

举个例子:

...do some processing...
// Send UI thread the integer values of the width & height of the image
...do some more processing...
// Send UI thread a String with custom message.
...do some more processing...
// Send UI thread an instance of MyObject so it can extract & display certain values
...do some cleanup job & finish...

但是,onProgressUpdate() 只接受一种类型的数组。

那么我是否将其设为包罗万象的 Object 类型?我怎么知道如何向下转换它,因为可以从第 1、2 或 3 行调用此方法,那么它是在哪个时间?

一定有一个好的方法来实现这个目标吗?

编辑:如果在 Android 中可行的话,我真正希望看到的是某种定义 publishProgress1(user-defined args1)publishProgress2(user-defined args2), publishProgress3(用户定义的 args3) ...

最佳答案

在你的第三种情况下......

// Send UI thread an instance of MyObject

...有人说您会在 onPostExecute() 中执行此操作,尽管这取决于您从插图中表达的意思。

您可以按照您的建议轻松地传递一个包罗万象的对象。该对象可以具有各种字段(整数、字符串、对象)以及用于描述哪些字段有效且需要处理的“操作”。

您可以简单地传递一个 int 枚举,例如 PROCESS_INT_WIDTH_AND_HEIGHTPROCESS_STRING_MESSAGEPROCESS_OBJECT 等。没有什么可以阻止您这样做...

private static class MyAsyncTask extends AsyncTask<String, int, Void> {
private int width;
private int height;
private String customMessage;
private MyObject myObject;

@Override
protected Void doInBackground(String... params) {

width = 10;
height = 10;
publishProgress(PROCESS_INT_WIDTH_AND_HEIGHT);
}

protected void onProgressUpdate(int... progress) {
if (progress == PROCESS_INT_WIDTH_AND_HEIGHT)
// Process width and height
}
}

换句话说,onProgressUpdate() 方法只是响应“命令”并相应地处理相关的私有(private)字段。

关于android - 如何让Asynctask以不同的方式更新UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5669530/

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