- 在AndroidDemos項(xiàng)目中墅诡,在測(cè)試事件傳遞機(jī)制的ActivityEventDiaspatch類中,由于自定義的View和ViewGroup在被點(diǎn)擊了以后會(huì)有一長(zhǎng)串的Toast來打印(事件傳遞的過程用Toast打印出來)桐智,這一系列的Toast打印完畢需要的事件挺長(zhǎng)的末早,而在此期間,如果如果按了返回鍵酵使,就將導(dǎo)致內(nèi)存泄露荐吉,因?yàn)門oast持有了該Activity,所以該Activity無法被垃圾回收器回收:
image.png
解決方法:
使用getApplicationContext()口渔,或者在自定義的Application類中:
public class MyApplication extends Application {
private static Context context;
@Override
public void onCreate() {
context = getApplicationContext();
}
public static Context getContext() {
return context;
}
-
BaseFragment持有一個(gè)靜態(tài)的MyListener,ActivityNoteAndTools和ActivityComponentIntereact等只要包含了繼承Basefragment的Fragment并且調(diào)用BaseFragment中的Mylistener方法穿撮,調(diào)用之后一旦退出activity缺脉,將會(huì)導(dǎo)致activity不能被回收:
image.png
image.png
解決方法:
(1):將MyListener改為非靜態(tài)
(2):
image.png
(3):傳入Applicatin類中的全局context
image.png