每次在同一设备上更新应用程序时内存大小都会增加

时间:2015-08-28 13:09:40

标签: android android-memory

问题是每当我在设备上更新我的应用程序时,内部存储器的大小就会增加到应用程序的大小。

我有一个应用程序在与应用程序关联的平板电脑上运行。即只有该应用程序将在该平板电脑上运行,它将成为平板电脑的启动应用程序。由于此功能,我添加了代码以在应用程序内部更新应用程序。我编写了代码从我的服务器下载应用程序并使用新版本更新应用程序。我还写了一些代码来检查设备上内存的使用内存和总内存。

注意:没有外部存储器,即此操作没有可用的SD卡。

情景是。

步骤1)我在应用程序中下载了该应用程序的新版本并进行了更新。

步骤2)在应用程序重新启动时更新后,我已在启动屏幕上编写代码以删除所有旧应用程序数据。旧数据包括应用程序缓存,存储的图像,下载的apk以及应用程序创建的清除文件夹。

步骤3)我重启设备以检查工作功能。现在应用程序启动后我检查内存,假设以前使用的/总内存为0.45GB / 5.08GB。现在我再次按照步骤1进行操作。

步骤4)重新启动后,当我检查内部内存大小时,令人惊讶的是内存大小增加了120MB,这是我的应用程序大小的大小+ -1MB。即使用内部存储器的旧大小/总计0.45Gb / 5.08Gb重启和更新应用程序后内存增加的大小为0.57GB / 5.08GB

我曾尝试检查数据/数据文件夹,但其大小也保持不变,但内部内存的大小增加到应用程序的大小。我不知道增加内部存储器的大小是什么。

操作系统在应用程序大小数据中是否存在任何地方或事物,或者我是否在应用程序中遗漏了导致内部存储器大小增加到确切大小的内容?

修改

删除我保留在特定路径中的视频的代码

/**
     * Method to delete all the videos from SD card on startup
     * */
    public static void deleteAllVideos() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                File dir = new File(directoryPath);
                try {
                    File[] files = dir.listFiles();
                    for (int i = 0; i < files.length; i++) {
                        files[i].delete();
                    }
                } catch (Exception e) {
                }
                dir.delete();
            }
        }).start();
    }

从设备删除APK的代码

    public static void deleteFile() {
        String imagePath = Environment.getExternalStorageDirectory()
                .getAbsolutePath();
        File folder = new File(imagePath);
        try {
            File[] filenamestemp = folder.listFiles();
            for (int i = 0; i < filenamestemp.length; i++) {
                if (filenamestemp[i].getAbsolutePath().toString()
                                .endsWith(".apk"))
                    filenamestemp[i].delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

从内存中删除应用程序缓存和缓存的图像

/**
     * Method to clear application data
     * 
     * @param Context
     *            context of screen
     * */
    public static void clearApplicationData(Context context) {
        File cache = context.getCacheDir();
        File appDir = new File(cache.getParent());
        if (appDir.exists()) {
            String[] children = appDir.list();
            for (String s : children) {
                if (!s.equals("lib")) {
                    deleteDir(new File(appDir, s));
                }
            }
        }

        try {
            File cacheDir = null;
            if (android.os.Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED)) {
                cacheDir = new File(
                        android.os.Environment.getExternalStorageDirectory(),
                        Global.CACHE_DIRECTORY);
            } else {
                cacheDir = context.getCacheDir();
            }
            if (cacheDir.exists()) {
                File[] filesList = cacheDir.listFiles();
                for (File file : filesList) {
                    file.delete();
                }
            }

        } catch (Exception e) {
        }

    }

这些删除代码用于删除我在内部存储器中创建的所有内容,包括应用程序缓存

1 个答案:

答案 0 :(得分:1)

我已成功找到与存储大小增加问题相关的问题。

问题是由于操作系统将应用程序的状态存储在内部存储目录的LOST.DIR文件夹中。

此文件夹存储有关应用程序/设备的信息,以便在发生任何丢失时,它将在下次启动应用程序时恢复。

我编写了删除此文件夹中所有文件的代码。删除后我的内存被恢复。删除这些文件对我们的应用程序或设备无害。它就像窗口的回收站,我们可以根据用途恢复已删除的文件。

在此测试期间,我还发现当我们关闭设备或重启设备时,我们的应用程序状态将保存在LOST.DIR文件夹中。原因是应用程序是单例,设备没有正确关闭,即如果我们直接关闭设备,而不使用电源按钮。这会导致操作系统保存应用程序的状态。

这里给出了整个理论(all-you-need-to-know-about-lostdir),其内容如下

什么是LOST.DIR?

Lost.dir是一个系统文件夹。它是Android操作系统放置在系统启动期间恢复的文件的位置(即打开手机时)。它类似于&#39;回收站&#39;在Windows操作系统下。存储在此目录中的文件通常是可恢复的。大多数时候你在LOST.DIR目录中找不到任何东西。

LOST.DIR中存储了哪些文件?

如果您正在保存文件并且突然手机关闭,或者您正在将文件写入其中时拉出SD卡 - Android系统会将这些文件的副本放在LOST.DIR目录中,以便它可以尝试恢复它们在下次启动时(下次系统启动时)。复制过程中的文件也被重命名。因此,如果您在文件夹中找到了名称较为严格的文件,请不要感到惊讶,因为它们只是您设备上存在的以前文件的重命名版本。     由于以下原因,文件可能最终存储在LOST.DIR文件夹中:

1)突然从Android手机中拔出SD卡

2)在Android设备上下载文件时中断

3)Android设备操作系统突然冻结

4)在进行某些读写过程时关闭设备。

如何从LOST.DIR文件夹中恢复文件?

为了阻止Android中LOST.DIR文件夹永久丢失文件,您必须在Android智能手机内存空间被某些新数据覆盖之前快速恢复丢失的文件。因此,建议使用一些相关的LOST.DIR Android恢复工具。 Yodot Android数据恢复,Recuva是一些适合我的例子。

我可以删除LOST.DIR的内容吗?

为了节省宝贵的内存空间,删除LOST.DIR的内容是完全正常的,因为它只能作为回收站。您也可以删除LOST.DIR文件夹本身,但它会在下次系统启动时重新出现。当您的Android系统抛出一条消息说“准备外部SD卡”时,它实际上检查LOST.DIR的内容,如果它找不到目录,它会创建一个。

必要的指南:

1)在向系统传输数据或从系统传输数据时,请避免突然移除Android设备的存储卡。

2)将您的图像或其他文件备份到其他设备。

3)使用正版的Android防病毒软件来保护自己免受病毒攻击。