在我的Android应用程序中,我通过扩展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;
}
}
由于
答案 0 :(得分:55)
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
,它是所有内容的基线类。
答案 1 :(得分:16)
(我在这个类中执行任何UI都没用)
然后只使用普通的Thread
类,而不是使用AsyncTask
类,该类用于在线程的生命周期内处理UI更改:
Runnable r = new Runnable()
{
@Override
public void run()
{
// your code here
}
};
Thread t = new Thread(r);
t.start();
答案 2 :(得分:3)
这是否正确使用了AsyncTask?
你没有说你的目标是什么。但AsyncTask通常用于长期任务,并在工作期间更新UI,以通知一些长期工作的进度变化。它也是非常有效的,类型安全的工具,比Handler更复杂。
扩展AsyncTask和AsyncTask
之间有什么区别
AsyncTask是泛型类型,您应该使用泛型,代码更快,类型更安全。
我没有用于执行任何UI
所以你宁愿使用Handler
或经典的Runnable
接口,你只能使用工作线程。
注意:通常,使用泛型类型可以使代码更快,大多数类型安全。
另外一个优点是在编译源代码中强类型检查,显式转换的限制等。
答案 3 :(得分:0)
我认为没有任何适当的用途。您可以使用asynctask在后台线程上执行大量操作,并在主线程上发布结果和更新。您不一定要发布结果或进度。那是给你的。您的决定。
但是对于您的网络操作,您也可以使用线程。但是后来您决定在主线程上发布结果和进度,Asynctask将以一种简单的方式为您提供帮助。
线程没有。
Asynctask使用通用数据类型作为参数。您必须提供它。如果您不想提供或接受asyctask的任何数据。您可以使用虚空类型
就像下面给出的
class MessagePooling extends AsyncTask<Void,Void,Void>
这意味着asynctask不会得到任何参数,不会给您带来任何进展或结果。
有关asynctask的更多信息:http://androidride.com/beginners-guide-asynctask-android-tutorial-example/