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

Android 每次更新同一设备上的应用程序时,内存大小都会增加,android,android-memory,Android,Android Memory,问题是,每当我在设备上更新应用程序时,内部内存的大小就会增加到应用程序的大小 我有一个应用程序,它运行在与该应用程序关联的平板电脑上。i、 e.只有该应用程序将在该平板电脑上运行,并且它将是平板电脑的引导应用程序。由于这个特性,我添加了代码来在应用程序内部更新应用程序。我已经编写了从服务器下载应用程序并用新版本更新应用程序的代码。此外,我还编写了一些代码来检查设备内部内存的已用内存和总内存 注意:没有外部存储器,即没有可用于此操作的sd卡 情况是这样的 步骤1)我在应用程序中下载应用程序的新版本

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

我有一个应用程序,它运行在与该应用程序关联的平板电脑上。i、 e.只有该应用程序将在该平板电脑上运行,并且它将是平板电脑的引导应用程序。由于这个特性,我添加了代码来在应用程序内部更新应用程序。我已经编写了从服务器下载应用程序并用新版本更新应用程序的代码。此外,我还编写了一些代码来检查设备内部内存的已用内存和总内存

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

情况是这样的

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

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

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

步骤4)当我检查内部内存大小时重新启动后,令人惊讶的是内存大小增加了120MB,这是我的应用程序大小的+-1MB。i、 e.使用的旧内存大小/总内存大小为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();
    }

这些是删除代码,我正在使用这些代码删除我在内部内存(包括应用程序缓存)中创建的所有内容。我已成功找到与存储大小增加问题相关的问题

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

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

我已经编写了删除此文件夹中所有文件的代码。删除后,我的内存恢复。删除这些文件对我们的应用程序或设备无害。它就像windows的回收站,在那里我们可以根据使用情况恢复已删除的文件

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

这里给出了整个理论,如下所示

丢失了什么。DIR?

Lost.dir是一个系统文件夹。它是安卓操作系统放置系统启动期间(即打开手机时)恢复的文件的地方。它类似于Windows操作系统下的“回收站”。存储在此目录中的文件通常是可恢复的。大多数情况下,在LOST.DIR目录中根本找不到任何内容

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

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

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

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

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

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

如何从丢失的.DIR文件夹中恢复文件?

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

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

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

必要的指导原则:

1) 避免在系统之间传输数据时突然取出Android设备的存储卡

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


3) 使用正宗的android防病毒软件保护自己免受病毒攻击

请显示相关代码。@F43nd1r什么类型
    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) {
        }

    }