我在我的Android应用程序中使用了一些本机库,我想在某个时间点将它们从内存中卸载.当加载了加载本机库的类的ClassLoader被垃圾收集时,库将被卸载.灵感:原生卸货.
在下面的代码中,我通过省略本机库加载代码来简化案例,只演示了Classloader内存泄漏.
我在Android KitKat 4.4.2,API 19上测试了它.设备:Motorola Moto G.
为了演示,我有以下ClassLoader,派生自PathClassLoader用于加载Android应用程序.
package com.demo;
import android.util.Log;
import dalvik.system.PathClassLoader;
public class LibClassLoader extends PathClassLoader {
private static final String THIS_FILE="LibClassLoader";
public LibClassLoader(String dexPath, String libraryPath, ClassLoader parent) {
super(dexPath, libraryPath, parent);
}
@Override
protected void finalize() throws Throwable {
Log.v(THIS_FILE, "Finalizing classloader " + this);
super.finalize();
}
}
Run Code Online (Sandbox Code Playgroud)
我有EmptyClass加载LibClassLoader.
package com.demo;
public class EmptyClass {
}
Run Code Online (Sandbox Code Playgroud)
内存泄漏是由以下代码引起的:
final Context …Run Code Online (Sandbox Code Playgroud) android garbage-collection memory-leaks classloader native-code