之所以专门写一篇关于finalize方法的博客,是因为被这个方法坑过,在写一个读取jni数据类的时候,我在类的finalize方法中调用了关闭文件和释放内存的方法,结果导致在频繁调用这个类的时候在JNI里面报异常,类本来就是单例的,按理分析不应该存在这样的情况,到最后分析出来就是因为在该类的finalize方法中调用了关闭文件的方法,导致下次进入再次打开文件时,被系统调用finalize方法给关闭掉了,出现异常的代码如下。
public class TraceHandle{
static{
try{
System.loadLibrary("TraceHandle");
}catch (UnsatisfiedLinkError ule){
Log.e("JNI", "WARNING: Could not load TraceHandle.so");
}
}
private TraceHandle( String filePath ){
mFilePath = filePath;
open( filePath );
}
/**
* 实例化TraceHandle
*
* */
public static TraceHandle create( String filePath ){
if (null == mTraceHandle){
mTraceHandle = new TraceHandle( filePath);
}
mTraceHandle.mInitCount++;