首先,需要确认内存泄漏的具体原因。可以使用 LeakCanary
等工具进行检测和分析。如果确认是广告库升级导致的内存泄漏,可以考虑以下解决方案:
静态的 Context 会一直持有 Activity 的引用,导致 Activity 无法被回收。可以使用 ApplicationContext 替代 Activity Context,或者将静态 Context 设置为 WeakReference。
在 Activity 生命周期结束时,一定要及时释放资源。例如,在 onDestroy() 方法中释放广告相关的资源。如果是使用 AsyncTask 等异步任务加载广告,也需要及时取消任务并释放相应的资源。
下面是一个具体的示例代码:
public class MyActivity extends Activity {
private MyAdLoader mAdLoader;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdLoader = new MyAdLoader(this);
mAdLoader.loadAd();
}
@Override
protected void onDestroy() {
if (mAdLoader != null) {
mAdLoader.destroy();
mAdLoader = null;
}
super.onDestroy();
}
}
public class MyAdLoader {
private Context mContext;
private AdRequest mAdRequest;
private AdView mAdView;
public MyAdLoader(Context context) {
mContext = context.getApplicationContext();
mAdRequest = new AdRequest.Builder().build();
mAdView = new AdView(mContext);
mAdView.setAdUnitId("ad_unit_id");
}
public void loadAd() {
mAdView.loadAd(mAdRequest);
}
public void destroy() {
mAdView.destroy();
mAdView = null;
}
}