2017-06-05 158 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替代解決方案。