補充一下樓上的回答,如果 class B 是一個靜態內部類,非要持有 activity 的引用的話,可以考慮弱引用。
static class B {
private WeakReference<Activirty> ref;
public void setRef(Activity activity) {
this.ref = new WeakReference<>(activity);
}
public void doSomething(){
if (ref.get() != null){
ref.get().doSomething();
}
}
}
關於記憶體洩漏問題建議閱讀文章
Android記憶體外洩-全解析與處理方法
題主你看一下下面這兩種情況就明白了。
A中的靜態方法a,傳入了一個Activity對象,然後方法結束,Activity的引用activity生命週期結束,這樣不會造成洩露,沒問題。
B中的靜態方法b,傳入一個Activity對象,然後B的成員變數mActivity接收了這個引用。這個靜態成員變數會一直存在在進程中,這樣就會造成記憶體外洩。
方法內的變數都是局部變量, 方法完了就不持有的。
當然可以啊,沒感覺有什麼不好的
補充一下樓上的回答,如果 class B 是一個靜態內部類,非要持有 activity 的引用的話,可以考慮弱引用。
建議樓上的弱引用方式,官方對於Handler的使用,也是這樣的方式
講道理的話,顯然可以這樣用
但是! ! ! 請不要這樣,樓上都說了,記憶體洩漏