当前位置: 首页 > 面试题库 >

扩展AsyncTask

喻选
2023-03-14
问题内容

在我的Android应用程序中,我正在doInBackground通过扩展AsyncTask<Void, Void, Void>类执行一些操作。(我没有用在此类中的任何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所有内容的基础类。



 类似资料:
  • 扩展是专门设计的在 Yii 应用中随时可拿来使用的, 并可重发布的软件包。例如, yiisoft/yii2-debug 扩展在你的应用的每个页面底部添加一个方便用于调试的工具栏, 帮助你简单地抓取页面生成的情况。 你可以使用扩展来加速你的开发过程。 信息: 本文中我们使用的术语 "扩展" 特指 Yii 软件包。而用术语 "软件包" 和 "库" 指代非 Yii 专用的通常意义上的软件包。 使用扩展

  • vscode-react-native vscode-go

  • 扩展为现有的类、结构体、枚举类型、或协议添加了新功能。这也包括了为无访问权限的源代码扩展类型的能力(即所谓的逆向建模)。扩展和 Objective-C 中的分类类似。(与 Objective-C 的分类不同的是,Swift 的扩展没有名字。) Swift 中的扩展可以: 添加计算实例属性和计算类型属性; 定义实例方法和类型方法; 提供新初始化器; 定义下标; 定义和使用新内嵌类型; 使现有的类型遵

  • 概述 范例-hello-world 范例-word-count 范例-language-server 范例-调试器 调试-扩展 安装-扩展 范式-原则 测试-扩展 用我们的方法创造扩展

  • 本页包含内容: 扩展语法 计算型属性 构造器 方法 下标 嵌套类型 扩展就是向一个已有的类、结构体或枚举类型添加新功能(functionality)。这包括在没有权限获取原始源代码的情况下扩展类型的能力(即逆向建模)。扩展和 Objective-C 中的分类(categories)类似。(不过与Objective-C不同的是,Swift 的扩展没有名字。) Swift 中的扩展可以: 添加计算型属

  • Jinja2 支持扩展来添加过滤器、测试、全局变量或者甚至是处理器。扩展的主要动力是 把诸如添加国际化支持的常用代码迁移到一个可重用的类。 添加扩展 扩展在 Jinja2 环境创建时被添加。一旦环境被创建,就不能添加额外的扩展。要添加 一个扩展,传递一个扩展类或导入路径的列表到 Environment 构造函数的 environment 参数。下面的例子创建了一个加载了 i18n 扩展的 Jinj