在我的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;
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
public class MessagePooling extends AsyncTask
{
@Override
protected Object doInBackground(Object... params)
{
while (!isCancelled())
{
//Getting data from server
SystemClock.sleep(1000);
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Dee*_*eeV 58
本AsyncTask类可以被认为是一个非常方便的线程机制.它为您提供了一些工具,您可以使用简单的Java线程,例如取消清理操作.您不必在后台执行任何UI.您可以通过将一个写为匿名类来执行一个,如下所示:
new AsyncTask<Integer, Void, Void>(){
@Override
protected Void doInBackground(Integer... params) {
// **Code**
return null;
}
}.execute(1, 2, 3, 4, 5);
Run Code Online (Sandbox Code Playgroud)
它将doInBackground使用给定参数执行您在后台线程中放入的任何内容.同样,您可以简单地使用Void和执行没有参数.
我能想到以这种方式执行线程的唯一优势是有助于将来的维护.可能存在您想要修改UI线程上必需的某些内容的情况,在这种情况下,您将覆盖其他方法.其他情况是你只是不做足够的动作来证明写出另一个类,所以只需动态创建一个并完成它.
编辑:
回答#3:它们实际上是一样的.该Void对象就像其他任何东西一样是Java对象.你没有使用Void,所以你在它的地方使用并不重要.只是AsyncTask合同需要传入三种类类型,默认情况下它们是Object所有内容的基线类.
Eng*_*uad 16
(我在这个类中执行任何UI都没用)
然后只使用普通Thread类而不是使用AsyncTask专门用于在线程生命周期内处理UI更改的类:
Runnable r = new Runnable()
{
@Override
public void run()
{
// your code here
}
};
Thread t = new Thread(r);
t.start();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75810 次 |
| 最近记录: |