Java 安卓;跳过XX帧&引用;

Java 安卓;跳过XX帧&引用;,java,android,multithreading,thread-sleep,Java,Android,Multithreading,Thread Sleep,所以我正在学习如何开发android应用程序。 我试图让这个程序快速闪现一些字母,一次一个 在textView上,但当我在android设备上尝试此功能时,它不起作用,我会收到消息“I/Choreographer”﹕ 跳过57帧!应用程序可能在其主线程上做了太多工作。“ (AttentialBlinkTrial是一个类,它有一个名为“blinkList”的字段,该字段是字符串的ArrayList) public void startTask(视图)引发中断异常{ TextView TextVie

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

public void startTask(视图)引发中断异常{
TextView TextView=(TextView)findViewById(R.id.display);
AttentionalBlinkTrial试验=新的AttentionalBlinkTrial();
trial.generateragets();
试验生成链接列表(5);

for(int i=0;iThread.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.
    }
}
public void闪烁(TextView TextView){
if(textView.getText()=“闪烁!”){
textView.setText(“”);
}否则{
setText(“闪烁!”);
}
}
public void blinkingTask()引发InterruptedException{
最终处理程序=新处理程序();
最终文本视图文本视图=(文本视图)findViewById(R.id.my_text);
Runnable Runnable=新的Runnable(){
@凌驾
公开募捐{
闪烁(文本视图);
}
};
对于(inti=0;i来看
.
您应该在单独的线程上执行所有操作

AttentionalBlinkTrial theTrial = new AttentionalBlinkTrial();
theTrial.generateTargets();
theTrial.generateBlinkList(5);

并且只在UI线程上设置文本。

处理程序不是实现AsycTask(异步任务、加载程序…)的唯一方法不过,这对于您的情况来说已经足够了。您好,谢谢您的帮助!我不太确定哪些数据应该放在处理程序中,哪些应该保留在当前方法中。我认为设置文本应该保留在当前方法中,因为它在UI线程中,但我不确定应该将哪些内容发布到处理程序中。谢谢。您当时的想法不正确一开始每个人都会犯这个错误,但没问题:)与其让整个应用程序“等待”,不如“延迟”该函数的执行。这样程序的其余部分就可以按计划进行了。我将在几分钟后为我的答案添加代码。
AttentionalBlinkTrial theTrial = new AttentionalBlinkTrial();
theTrial.generateTargets();
theTrial.generateBlinkList(5);