java - 安卓 "Skipped XX frames!"

标签 java android multithreading thread-sleep

所以我正在学习如何开发 android 应用程序。 我试图让这个程序快速闪烁一些字母,一次一个 在 textView 上,但是当我在我的 android 设备上尝试这个并且它不起作用时,我收到消息“我/Choreographer:跳过 57 帧!应用程序可能在其主线程上做了太多工作。” (AttetionalBlinkTrial 是一个类,它有一个名为“blinkList”的字段,它是一个字符串 ArrayList)

public void startTask(View view) throws InterruptedException {
    TextView textView = (TextView) findViewById(R.id.display);
    AttentionalBlinkTrial theTrial = new AttentionalBlinkTrial();
    theTrial.generateTargets();
    theTrial.generateBlinkList(5);
    for (int i = 0; i <= 5; i++) {
        textView.setText(theTrial.getBlinkList().get(i));
        Thread.sleep(40);
        textView.setText(");
        Thread.sleep(40);
    }
}

最佳答案

Thread.sleep 使 UI 线程不可访问。您应该改用 Handler 类。抱歉,我无法提供任何代码,因为我在移动设备上,但这很容易。如果我没记错的话,“postDelayed”方法就是您所需要的。

public void blink(TextView textView) {
    if (textView.getText() == "Blink!") {
        textView.setText("");
    } else {
        textView.setText("Blink!");
    }
}

public void blinkingTask() throws InterruptedException {
    final Handler handler = new Handler();
    final TextView textView = (TextView) findViewById(R.id.my_text);
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            blink(textView);
        }
    };

    for (int i = 0; i <= 5; i++) {
        handler.postDelayed(runnable, 1000 + (i * 1000)); // 5 delayed actions with 1000 ms interval.
    }
}

关于java - 安卓 "Skipped XX frames!",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26964831/

相关文章:

java - 在android中使用带有multipart的HttpUrlConnection上传文件的进度非常快

java - System.in 上的 readLine,无需挂起 Swing GUI 线程

c++ - std::thread 中的参数。如何运作?

java - SOAP 设置参数java

java - 为什么在 Spring 中使用 Junit 运行时事务不会回滚

java - 如何检查变量是 double 型还是字符串型

java - 简化 boolean 表达式 +(查找日期是否在给定日期范围内)

android - 接到电话后应用程序崩溃

java - 在某个字符的最后一次出现处拆分字符串

c++ - 无法使用 OpenCV 打开两个摄像头 - 多线程摄像头读取