java - 使用相同的字符串写入多个文件而不挂起 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;
}
解决方案
事先确定 CPU 的数量并在循环中使用该数字,而不是使用 while (true) 必须在每个循环中执行 SuFile.exists()。
我不知道 SuFileOutputStream 是什么,但如果实现速度太慢,您可能需要关闭这些文件输出流或找到更快的方法来写入文件。
推荐阅读
- curl - Azuracast - 带有 API 密钥的 Swagger API PHP Curl POST
- reactjs - 使用 React Native 和 Expo 创建 OSM 地图应用
- mongodb - MongoDB 在 bulkWrite() 上更改流
- android - 处理屏幕旋转上的相对布局视图
- awk - 用awk语言计算最大公约数
- sql - 如何创建联结表并添加索引?
- mysql - 在本地使用节点 API 测试 MySQL 数据库
- node.js - Nodejs/Express Ajax POST 调用
- java - 如何在spring webflux webclient中发送“一劳永逸”的请求?
- regex - 重定向 301:如何从 Nginx 转换为 Apache