【问题标题】:activities lifecycle and how to cleanup temp files活动生命周期以及如何清理临时文件
【发布时间】:2012-09-21 11:06:30
【问题描述】:

我正在编写一个应用程序,允许用户制作照片,然后对其进行一些处理。

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

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

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

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

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

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我也是这么想的,但是如果应用程序在另一个活动中完成,那么文件将保留在那里
    • 是的,它们应该保留,因为用户可以稍后再次启动您的应用程序,并且能够导航回您的活动。如果你删除这个文件,Activity 将找不到它。
    • 完全有道理,但我不希望这些文件在那里。如果应用程序重新启动,它应该从头开始重新启动(对于这个应用程序的情况)。
    • 您在应用程序中使用 System.exit(0) 吗?
    • “应用程序在另一个活动中完成”是什么意思?这怎么可能发生?用户按下“主页”按钮?但在这种情况下,应用程序并没有完成,它只是移到了后台。
    【解决方案2】:

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

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

    这里有一篇解释如何手动清除缓存的帖子:How to delete cache-folder of app?

    【讨论】:

    • Android 文档没有说这些文件将在应用退出时被销毁。它说他们将在应用程序卸载时被销毁
    • 我正在使用该文件夹来创建文件,但它们仍然存在。
    • 我开始使用 getCacheDir,但我记得,这些文件是您的应用程序私有的,并且应用程序与其他人交互(通过邮件将文件作为附件发送),这些文件在该内部不可见缓存目录,所以我改为getExternalCacheDir。
    【解决方案3】:

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

    @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 没有被调用。我将与 boulder 的 onBackPressed 建议一起测试这种方法。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2014-12-05
      • 2014-05-18
      • 1970-01-01
      • 2013-01-13
      • 2011-12-18
      相关资源
      最近更新 更多