Android class with nested asynctask



我对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();

问题是,我得到一个错误说"HeavyTest不是一个封闭类"。我的类是这样的:

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

使类成为"封闭类"所需的内容

——编辑——

我已经看过了作为可能重复我的问题给出的答案,它不起作用。给出的答案建议使用static作为我的内部类,但这对我不起作用。

然而,我发现我可以这样做:

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

它可以工作,但是这样做的含义(如果有的话)是什么?这是不好的练习吗?

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

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

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

package.heavystuff

.

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

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

最新更新