在我的安卓应用程序中,我通过扩展doInBackground类在AsyncTask<Void, Void, Void>中执行一些操作。(我在这个类中执行任何UI都没有用)
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;
}
}谢谢
发布于 2012-06-25 18:12:26
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,它是所有事物的基线类。
发布于 2012-06-25 18:00:27
(我在这个类中执行任何UI都没有用)
然后只使用普通的Thread类,而不是使用AsyncTask类,该类是为处理线程生命周期中的UI更改而设计的:
Runnable r = new Runnable()
{
@Override
public void run()
{
// your code here
}
};
Thread t = new Thread(r);
t.start();发布于 2012-06-25 18:01:30
这是AsyncTask的正确使用吗?
你没说你的目标是什么。但是,AsyncTask通常用于长任务和在工作期间更新UI,以准确地通知某些长时间工作的某些进度更改。它也是非常高效的,类型安全的工具,并且比Handler更复杂。
扩展AsyncTask和AsyncTask有什么区别?
AsyncTask是泛型类型,您应该与它们一起使用泛型是代码更快、更类型安全.
我对执行任何UI都没有用。
因此,您可以使用Handler或经典的Runnable接口,并且基本上只能使用工作线程。
注意:一般情况下,使用泛型类型可以使代码更快、最安全.另一个优势是编译源代码的类型检查能力强,对显式转换的限制等等。
https://stackoverflow.com/questions/11194663
复制相似问题