【问题标题】:When should I clean the applications' temp files?我应该什么时候清理应用程序的临时文件?
【发布时间】:2014-05-07 16:38:26
【问题描述】:

我正在编写一个应用程序并在内部存储中使用一些临时文件,例如(/myapp/files/tmp/*)

这些文件是临时的,在应用程序退出时被视为过期。 清理此类文件有哪些好的做法?

Application 类中没有onDestroy()。活动之间的交换意味着知道活动的onDestroy 何时退出活动或应用程序并非易事。此外,例如,当应用程序崩溃时,这些都不会被调用。不保证会调用它们。

所以我在我的 Application 类实例中清理 onCreate 中的那些文件(在 onCreate 启动的 AsyncTask 中)。

但这对我来说似乎有点古怪。启动应用程序将启动一个线程以删除以前使用的不必要文件。有一个更好的方法吗?

file.deleteOnExit() 在 Android 上也不鼓励使用

【问题讨论】:

  • 你可以覆盖Application类的onTerminate()。
  • @BirajZalavadia onTerminate() 似乎是一个非常非常糟糕的主意:“此方法用于模拟进程环境。它永远不会在生产 Android 设备上调用,其中进程被简单地删除杀死它们;这样做时不会执行任何用户代码(包括此回调)。"
  • 那么当你想删除你的临时文件时?应用何时进入后台?
  • 我希望在不再需要它们时立即删除它们,这意味着只要应用程序退出并且 vm 终止。 (不是在应用程序最小化时)我通常要求文件缓存管理的良好做法或技巧 - 例如在应用程序启动/退出时创建和删除的临时文件夹,或类似 file.deleteOnExit() 的东西安卓。

标签: android caching storage temporary-files


【解决方案1】:

您可以通过使用活动的生命周期来实现这一点。

按照步骤操作。

1) 创建 BaseActivity.java 扩展 Activity 或 FragmentActivity。

2) 所有其他活动都将扩展 BaseActivity。

3) 现在你需要重写两个方法说

onResume();

onPause();

4) 您的基本活动的样子。

public abstract class BaseActivity extends Activity {

    public static int actictyCounter=0;


    @Override
    protected void onResume() {
        super.onResume();
        actictyCounter++;
    }

    @Override
    protected void onPause() {
        super.onPause();
        actictyCounter--;

        // This was the last activity 
        if(actictyCounter==0){
            //code to remove your temp files
        }
    }

}

【讨论】:

  • 这是一种跟踪我的应用程序是否正在运行的可怕方法。统计所有活动的静态可变数据?我在地狱里没有办法这样做。我不会对你的答案投反对票,因为它可以通过这种方式完成,并且你已经付出了一些努力来展示它,但我不会接受这个作为答案。
  • 好吧,只要您找到比更新我的答案更好的解决方案,这都不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
相关资源
最近更新 更多