首页 > 解决方案 > 使用相同的字符串写入多个文件而不挂起 UI

问题描述

我正在开发一个 Android 应用程序,该应用程序会在前台应用程序更改时更改 CPU 频率。前台应用程序的频率在我的应用程序本身中定义。但是在更改频率时,我的应用程序必须打开多个系统文件并用我的文本替换频率。这使我的 UI 变慢,并且当我不断更改应用程序时,它会使 systemUI 崩溃。我能做些什么来同时编写这些多个文件?

我曾尝试使用 ASynctaskLoader ,但稍后也会使 SystemUI 崩溃。

public static boolean setFreq(String max_freq, String min_freq) {
       ByteArrayInputStream inputStream = new ByteArrayInputStream(max_freq.getBytes(Charset.forName("UTF-8")));
       ByteArrayInputStream inputStream1 = new ByteArrayInputStream(min_freq.getBytes(Charset.forName("UTF-8")));

       SuFileOutputStream outputStream;
        SuFileOutputStream outputStream1;
        try {
            if (max_freq != null) {
                int cpus = 0;
                while (true) {
                    SuFile f = new SuFile(CPUActivity.MAX_FREQ_PATH.replace("cpu0", "cpu" + cpus));
                    SuFile f1 = new SuFile(CPUActivity.MIN_FREQ_PATH.replace("cpu0", "cpu" + cpus));

                    outputStream = new SuFileOutputStream(f);
                    outputStream1 = new SuFileOutputStream(f1);

                    ShellUtils.pump(inputStream, outputStream);
                    ShellUtils.pump(inputStream1, outputStream1);

                    if (!f.exists()) {
                        break;
                    }
                    cpus++;
                }

            }
        } catch (Exception ex) {
        }
        return true;
    }

标签: javaandroid

解决方案


事先确定 CPU 的数量并在循环中使用该数字,而不是使用 while (true) 必须在每个循环中执行 SuFile.exists()。

我不知道 SuFileOutputStream 是什么,但如果实现速度太慢,您可能需要关闭这些文件输出流或找到更快的方法来写入文件。


推荐阅读