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

Memory size increasing every time I update application on same device

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

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

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

场景是。

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

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

步骤 3) 我重新启动设备以检查工作功能。现在应用程序启动后我检查内存,假设之前 used/total 内存为 0.45GB/5.08GB。现在我再次执行步骤 1。

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

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

是否有 OS 保留在应用程序大小数据中的任何地方或东西,或者我是否在应用程序中遗漏了一些导致内部存储器大小增加到确切大小的东西?

编辑

用于删除我保存在特定路径中的视频的代码

/**
     * 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) {
        }

    }

这些是我用来删除我在内存中创建的所有内容(包括应用程序缓存)的删除代码

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

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

此文件夹存储有关 application/device 的信息,因此如果发生任何丢失,将在下次启动应用程序时恢复。

我已经编写了删除此文件夹中所有文件的代码。删除后我的记忆恢复了。删除这些文件对我们的应用程序或设备无害。就像windows的回收站一样,我们可以根据用途恢复删除的文件。

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

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

什么是LOST.DIR?

Lost.dir是系统文件夹。它是 Android OS 放置系统启动期间恢复的文件的地方(即当您打开 phone 时)。它类似于 Windows OS 下的 'Recycle Bin'。存储在此目录中的文件通常是可恢复的。大多数时候,您在 LOST.DIR 目录中根本找不到任何东西。

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

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

1) 突然从Android中拔出SD卡 phone

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

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

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

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

为了防止 Android 中 LOST.DIR 文件夹中的文件永久丢失,您必须在 Android smartphone 内存 space 被一些新数据覆盖。因此,建议使用一些相关的 LOST.DIR Android 恢复工具。 Yodot Android Data Recover、Recuva 是几个对我有用的例子。

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

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

必要的指南:

1) 避免在传输数据to/from 系统时突然移除Android 设备的存储卡。

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

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