Android class 嵌套异步任务

Android class with nested asynctask

我对 Java 比较陌生 (ish)..

我正在编写一个 Android 应用程序,现在我要回顾我的代码并整理并坚持我的编码结构以达到更佳的实践风格。

我正在构建我认为合适的方法和 classes 以避免我生成的大量重复代码。我发现自己试图创建一个 class(例如 HeavyStuff.java),其中包含多个 AsyncTask 方法(例如 MyTask1 和 MyTask2)。当从 activity 调用 class 时,我想在某个时间点执行 MyTask1,而在其他地方的某个时间点我想执行 MyTask2。我正在尝试分别使用以下内容:

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

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

问题是,我收到一条错误消息说 "HeavyTest is not an enclosing class"。我的 class 看起来像这样:

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> {
        //...
        //...
    }
}

class也可以在这里看到完整的:http://hastebin.com/yahihokupu

我缺少什么才能使 class 成为 "enclosing class"。

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

我查看了可能与我的问题重复的答案,但它不起作用。给出的答案建议使用 static 作为我内心的 class,但这对我不起作用。

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

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

它有效,但是这样做有什么影响(如果有的话)?这是不好的做法吗?

我知道你把 MyTask1MyTask2 都放在了同一个 class 中,因为它们很相似,但总的来说这并不理想。

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

您仍然可以将它们 "together" 放在同一个 java 包中,例如:

package.heavystuff

.

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

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