2017-06-05 204 views
1

我想从class C访问class BAsyncTask的子类别),其中class Bclass A的内部班级。从新班级取得班级

我的代码结构是

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

class C{ 
    public void method() { 
     //here I want to access class B. 
    } 
} 

请帮助我。

回答

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(); 
    } 
} 
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替代解决方案。