当前位置: 首页 > 知识库问答 >
问题:

具有嵌套异步任务的Android类

孙朗
2023-03-14

我对Java比较陌生。。

我正在编写一个Android应用程序,现在我将回顾我的代码,整理并坚持我的编码结构,使之更符合最佳实践风格。

我正在构建我认为合适的方法和类,以避免产生大量重复代码。我发现自己正在尝试创建一个类(例如HeavyStuff.java),其中包含几个AsyncTask方法(例如MyTask1和MyTask2)。从活动调用类时,我希望在某个点执行MyTask1,在其他点执行MyTask2。我试图分别使用以下内容:

HeavyStuff.MyTask1 myTask1 = new HeavyStuff.MyTask1();
myTask1.execute();

而且

HeavyStuff.MyTask2 myTask2 = new HeavyStuff.MyTask2();
myTask2.execute();

问题是,我得到一个错误,说“重试不是一个封闭的类”。我的课是这样的:

package com.wizzkidd.myapp;

import android.os.AsyncTask;

public class HeavyStuff {

    public class MyTask1 extends AsyncTask<String, String, String> {
        //...
        //...
    }

    public class MyTask2 extends AsyncTask<String, String, String> {
        //...
        //...
    }
}

该课程的完整内容也可在此处查看:http://hastebin.com/yahihokupu

使类成为“封闭类”所需的我缺少什么。

-----编辑-----

我看了看答案,可能是重复我的问题,它不起作用。给出的答案建议对我的内部类使用静态,但这对我不起作用。

然而,我发现我可以做到这一点:

HeavyStuff.MyTask1 myTask1 = new HeavyStuff().new MyTask1();
myTask1.execute();

它是有效的,但这样做有什么意义(如果有的话)?这是坏习惯吗?

共有2个答案

卫高谊
2023-03-14

我已经找到了我问题的答案。我最初发布了我认为是一个编辑解决方案,但为了澄清,这是我的工作答案:

HeavyStuff.MyTask1 myTask1 = new HeavyStuff().new MyTask1();
myTask1.execute();
殷承恩
2023-03-14

我知道您将MyTask1MyTask2放在同一个类中,因为它们是相似的,但是一般来说这并不理想。

如果您计划在整个代码库中创建MyTask1的新实例以及MyTask2的新实例,那么它们应该位于各自完全独立的类中(即MyTask1.java仅包含类MyTask1)。

通过将它们放在同一个java包中,您仍然可以将它们“放在一起”,例如:

package.heavystuff

...

 类似资料:
  • 问题内容: 我想对不带数字键()的mongoDB集合执行迭代。集合只有一个随机字符串作为_id,并且集合的大小很大,因此使用来将整个文档加载到RAM 上不是可行的选择。另外,我想对每个元素执行异步任务。的使用或者,是因为任务的异步性质的限制。我尝试使用上述方法运行任务,但它确实与异步任务冲突,返回了未完成的承诺而不是正确的结果。 例 我怎样才能仅使用mongoDB集合进行迭代? 问题答案: 该方法

  • 异常: 嵌套任务透传 重新处理生成器嵌套,需要将子生成器异常抛向父生成器。 当生成器迭代过程发生未捕获异常,生成器将会被关闭,Generator::valid返回false,未捕获异常会从生成器内部被抛向父作用域,嵌套子生成器内部的未捕获异常必须最终被抛向根生成器的calling frame,PHP7中yield-from对嵌套子生成器resume时产生的异常,采取goto try_again传递

  • 这是在一次Android采访中被问到的。有人问我是否可以从异步任务 1 的 doInBackground() 方法(让它成为 Task1)启动另一个异步任务(让它成为 Task2)。我浏览了文档,其中说了以下内容: 必须在UI线程上创建任务实例。 必须在 UI 线程上调用 execute(Params...)。 根据这些陈述,我认为从另一个任务的后台方法启动一个任务是不可能的。此外,async任务

  • 本文向大家介绍Android的异步任务AsyncTask详解,包括了Android的异步任务AsyncTask详解的使用技巧和注意事项,需要的朋友参考一下 AsyncTask,顾名思义,异步任务。说到异步,最简单的理解就是不同步。再复杂一点理解,就得举例子了。 假设我要去火车站买票,刚到火车站我突然发现我忘了带身份证。怎么办?怎么办! 想办法,想办法!我想我应该找个在学校的同学帮我送过来,因为我不

  • 我正在尝试使用以下代码: 是我在Android应用程序中使用的OAuth2Client的一部分。我得到这个错误: 我会提供一些帮助。 谢谢

  • 我是从我的应用程序连接到互联网的小新,所以我得到了这个错误,我的代码在这里。 UyariPencerem 和kulaniciKontrol 和 islemTamam 代码 感谢您的帮助...