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

时间:2012-09-21 11:06:30

标签: android android-activity lifecycle temporary-files resource-cleanup

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

我使用IMAGE_CAPTURE意图启动相机,并提供保存照片的路径。

这张照片是暂时的,我希望在我的应用完成后将其删除。

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

我遇到的问题是,当用户更改设备的方向时,活动会被销毁并替换为新活动,但我无法删除文件只是因为用户稍后需要更改方向。

那么,我可以做些什么来保留这些文件?

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

提前致谢

4 个答案:

答案 0 :(得分:2)

我认为最好的方法是在活动的覆盖onBackPressed()方法中删除它。你看,后退按下事件是唯一的退出点,意味着用户与此活动实例进行了交互,并且会更新回到它。

答案 1 :(得分:2)

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

更好地使用getCacheDir()作为本地存储中的缓存目录路径。当设备内存不足时,该内存将自动清除。

以下是解释如何手动清除缓存的帖子:How to delete cache-folder of app?

答案 2 :(得分:1)

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

@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
}

答案 3 :(得分:0)

您可以查看isFinishing()内的onDestroy()方法,如此问题的已接受答案中所述How to distinguish between orientation change and leaving application android