从新班级中汲取内心阶级

时间:2017-06-05 07:45:49

标签: android android-asynctask inner-classes

我想从class B访问AsyncTask({1}}的子类),其中class Cclass B的内部类。

我的代码结构是

class A

请帮帮我。

2 个答案:

答案 0 :(得分:1)

 class A{
      Class B extends AsyncTask<>(){
      }
    }



Class C{
   public void method()
   {
      //First create root class object. Then call sub class and execute it as 
      //below
      new ClassA().new ClassB().execute();
   }
}

答案 1 :(得分:0)

首先将Class B公之于众。

class A{
    public class B extends AsyncTask<>(){

    }
}

然后在Class C方法中调用它。

class C{
  public void method(){
    A a = new A();
    A.B b = a.new B();
    b.execute();
  }
}

作为一般性说明:避免使用内部类AsyncTask,因为它可能导致内存泄漏,因为它包含对class A的隐式引用。这意味着即使class A被破坏,您的AsyncTask也可能会过时,并且不会释放您的class A,这就是内存泄漏。

最简单的解决方案是使AsyncTask静态。

class A{
    public static class B extends AsyncTask<>(){

    }
}

class C{
   public void method(){
      B b = new B();
      b.execute();
   }
}

除了将内部AsyncTask子类设为静态外,您还可以将WeakReference视为替代解决方案。