java - setText ("test") 正在卡住 UI

标签 java android

我听不懂

我有一个后台线程,它获取 CPU 负载,然后将其设置为 TextView

问题是当执行 setText() 方法时 UI 卡住一秒钟,当滚动浏览 ui 的其他元素时我可以感觉到

Runnable runnable = new Runnable() {
        @Override
        public void run() {
            while(thread) {
                try {
                    RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");
                    String load = reader.readLine();

                    String[] toks = load.split(" ");

                    long idle1 = Long.parseLong(toks[5]);
                    long cpu1 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4])
                        + Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);

                    try {
                        Thread.sleep(360);
                    } catch (Exception e) {
                        }

                    reader.seek(0);
                    load = reader.readLine();
                    reader.close();

                    toks = load.split(" ");

                    long idle2 = Long.parseLong(toks[5]);
                    long cpu2 = Long.parseLong(toks[2]) + Long.parseLong(toks[3]) + Long.parseLong(toks[4])
                        + Long.parseLong(toks[6]) + Long.parseLong(toks[7]) + Long.parseLong(toks[8]);

                    fLoad =  (float)(cpu2 - cpu1) / ((cpu2 + idle2) - (cpu1 + idle1));

                } catch (IOException ex) {
                        }
                final int load =(int) (fLoad*100);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                }
                mHandler.post(new Runnable() {
                        @Override
                        public void run() {

                            setCpuLoad(load);
                        }
                    });
            }
        }
    };
    new Thread(runnable).start();
}

.

 private final void setCpuLoad(int load){
    cpuLoad.setProgress(load);
    cpuLoadTxt.setText(load+"%");
}

我尝试了很多东西,最终发现问题出在 setText() 中,因为当我评论它时,UI 很流畅

最佳答案

检查您在哪个线程中创建处理程序。 您应该在主(UI)线程上执行此操作。

关于java - setText ("test") 正在卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14710458/

相关文章:

java - 在不知道索引的情况下从 ArrayList 中删除对象

java.util.Optional 到 java.lang.Iterable?

android - NumberPicker 中的 HTML 格式文本

android - 分析 ListView 标题点击

java - 从 RecyclerView 中的 ViewHolder 调用 Activity ?

android - 无法从github运行演示android项目

java - Android - 将文本框内容应用于 webview 的变量

java - 如何在 Processing 调试器中获取堆栈跟踪

java - Java泛型参数如何在被重写的方法中工作?

android - 我想知道在哪里可以找到支持 android 的 webdriver 包