手机开发者模式中有这样一个功能,不保留活动,打开以后跳转后,当前Activity会被系统回收,走onSaveInstanceState()方法保存activity的信息,返回时会重走生命周期,加上onRestoreInstanceState()方法。但是在调试的时候回报这样的java.lang.InstantiationException异常,意思是反射的时候不能不能实例化这个类,我找到了地方,就是fragment里的一个方法报了这样的错误,原因是(Fragment)clazz.newInstance();这句话,因为必须要有无参数的构造方法,所以报错了。
public static Fragment instantiate(Context context, String fname, @Nullable Bundle args) {
try {
Class<?> clazz = sClassMap.get(fname);
if (clazz == null) {
// Class not found in the cache, see if it's real, and try to add it
clazz = context.getClassLoader().loadClass(fname);
sClassMap.put(fname, clazz);
}
Fragment f = (Fragment)clazz.newInstance();
if (args != null) {
args.setClassLoader(f.getClass().getClassLoader());
f.mArguments = args;
}
return f;
} catch (ClassNotFoundException e) {
throw new InstantiationException("Unable to instantiate fragment " + fname
+ ": make sure class name exists, is public, and has an"
+ " empty constructor that is public", e);
} catch (java.lang.InstantiationException e) {
throw new InstantiationException("Unable to instantiate fragment " + fname
+ ": make sure class name exists, is public, and has an"
+ " empty constructor that is public", e);
} catch (IllegalAccessException e) {
throw new InstantiationException("Unable to instantiate fragment " + fname
+ ": make sure class name exists, is public, and has an"
+ " empty constructor that is public", e);
}
}