活动生命周期以及如何清理临时文件



我正在编写一个应用程序,允许用户制作照片,然后使用它做一些工作。

我以IMAGE_CAPTURE意图启动相机,并提供一条路径将照片保存到该位置。

这张照片是临时的,我想在我的应用程序完成后将其删除。

有一个活动,我显示照片并允许用户与之交互,我认为删除它的最佳方法是使用 onDestroy 方法。

我遇到的问题是,当用户更改设备的方向时,活动将被销毁并替换为新活动,但我不能仅仅因为用户更改方向而删除文件,因为稍后需要它。

那么,我该怎么做才能删除这些文件呢?

是否有任何其他方法可以覆盖,例如onAppExit,我可以在其中删除所有临时文件?

提前致谢

我认为最好的方法是在覆盖的 onBackPressed() 方法中删除它。您会看到,后按事件是唯一的退出点,这意味着用户已完成与此活动实例的交互,并且将重新返回到它。

始终使用 getExtExternalCacheDir() API 获取 sdcard 上的缓存目录。在此路径中创建所有临时文件。卸载应用后,此缓存将被销毁

最好将getCacheDir()用于本地存储中的缓存目录路径。当设备内存不足时,将自动清除此内存。

这是一篇解释如何手动清除缓存的帖子:如何删除应用程序的缓存文件夹?

所以声明全局布尔旋转并使用它:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {      
    super.onRestoreInstanceState(savedInstanceState);
    rotation=false;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Auto-generated method stub
    rotation = true;
    super.onSaveInstanceState(outState);
}

然后在onDestroy()使用

if(!rotation){
//delete here
}
您可以从

onDestroy()中检查isFinishing()方法,如此问题的已接受答案中所述 如何区分方向变化和离开应用程序安卓

最新更新