扩展 AsyncTask<Void、 Void、 Void>

2022-09-01 01:59:44

在我的 Android 应用中,我正在执行 by extending 类中的一些操作(我在此类中执行任何 UI 都没有用处)doInBackgroundAsyncTask<Void, Void, Void>

  1. 这是AsyncTask的正确用法吗?
  2. 如果是这样,我可以扩展AsyncTask吗?
  3. 扩展和AsyncTaskAsyncTask<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;    
    }
}

谢谢


答案 1

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

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

它将使用给定的参数执行您在后台线程上放入的任何内容。同样,您可以简单地使用和执行,无需任何参数。doInBackgroundVoid

我能想到的以这种方式执行线程的唯一优点是帮助将来的维护。在某些情况下,您可能希望修改 UI 线程上所需的某些内容,在这种情况下,您将重写其他方法。其他情况是,你根本没有做足够的动作来证明写出另一个类是合理的,所以只需在运行中创建一个并完成它。

编辑:

回答#3:它们实际上是相同的。该对象是 Java 对象,就像其他对象一样。你没有使用,所以你在它的地方使用什么并不重要。只是合约需要传入三个类类型,默认情况下它们是所有内容的基线类。VoidVoidAsyncTaskObject


答案 2

(我在此类中执行任何UI都没有用)

然后只使用普通类,而不是使用专为在线程的生命周期内处理 UI 更改而设计的类:ThreadAsyncTask

Runnable r = new Runnable()
{
    @Override
    public void run()
    {
        // your code here
    }
};

Thread t = new Thread(r);
t.start();

推荐