最佳答案
我有一个简单的活动,加载一个位图在 onCreate
。我发现如果旋转设备,我可以从 onCreate
再次调用的日志中看到。事实上,因为所有的实例变量都被再次设置为默认值,所以我知道整个 Activity 已经被重新实例化了。
在旋转2次后,我得到一个 FC,因为没有足够的内存可以分配给位图。(活动的所有实例是否仍然存在于某个地方?还是 GC 清理得不够快?)
@Override
public void onCreate(Bundle savedInstanceState) {
File externalStorageDir = Environment.getExternalStorageDirectory();
File picturesDir = new File(externalStorageDir, "DCIM/Camera");
File[] files = picturesDir.listFiles(new FilenameFilter(){
public boolean accept(File dir, String name) {
return name.toLowerCase().endsWith(".jpg");
}});
if (files.length > 0) {
Bitmap bm = BitmapFactory.decodeStream(new FileInputStream(files[0]));
ImageView view = (ImageView) findViewById(R.id.photo);
view.setImageBitmap(bm);
}
}
从我读到的所有内容来看,onCreate 应该在应用程序的生存期内调用一次。我说错了吗?重新定向设备如何导致重新创建活动?