gpt4 book ai didi

java - 扩展 AsyncTask

转载 作者:IT老高 更新时间:2023-10-28 20:43:53 30 4
gpt4 key购买 nike

在我的 android 应用程序中,我在 doInBackground 中执行一些操作通过扩展 AsyncTask<Void, Void, Void>类(class)。 (我在这个类中执行任何 UI 都没用)

  1. 这是正确使用 AsyncTask 吗?
  2. 如果可以,我可以改为扩展 AsyncTask 吗?
  3. 扩展AsyncTask有什么区别?和 AsyncTask<Void, Void, Void>

代码示例:

public class MessagePooling extends AsyncTask<Void, Void, Void>
{
@Override
protected Void doInBackground(Void... params)
{
while (!isCancelled())
{
//Getting data from server
SystemClock.sleep(1000);
}
return null;
}
}

或者:

public class MessagePooling extends AsyncTask
{
@Override
protected Object doInBackground(Object... params)
{
while (!isCancelled())
{
//Getting data from server
SystemClock.sleep(1000);
}
return null;
}
}

谢谢

最佳答案

AsyncTask 类可以被认为是一种非常方便的线程机制。它为您提供了一些工具,您可以使用这些简单的 Java 线程根本没有的工具,例如取消清理操作。您不必在后台执行任何 UI。您可以简单地通过将一个编写为匿名类来执行一个,如下所示:

    new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
// **Code**
return null;
}
}.execute(1, 2, 3, 4, 5);

它将使用给定参数在后台线程上执行您放入 doInBackground 的任何内容。同样,您可以简单地使用 Void 并不带参数执行。

我能想到以这种方式执行线程的唯一好处是有助于将来的维护。在某些情况下,您可能想要修改 UI 线程上需要的某些内容,在这种情况下,您将覆盖其他方法。其他情况是您根本没有执行足够的操作来证明编写另一个类的合理性,因此只需动态创建一个并完成它。

编辑:

回答 #3:它们实际上是相同的。 Void 对象是一个Java 对象,就像其他任何东西一样。你没有使用 Void,所以你在它的位置使用什么并不重要。只是 AsyncTask 合约需要传入三个类类型,默认情况下它们是 Object ,这是所有东西的基线类。

关于java - 扩展 AsyncTask<Void, Void, Void>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194663/

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