所以我正在学习如何开发Android应用程序。 我试图让这个程序快速刷新一些字母,一次一个 在textView上,但是当我在我的Android设备上尝试这个并且它不起作用时,我得到消息“I / 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);
}
}
答案 0 :(得分:2)
Thread.sleep使UI线程无法访问。您应该使用Handler类。抱歉,由于我在移动设备上,因此我无法提供任何代码,但这很简单。如果我记得正确&#34; postDelayed&#34;方法就是你所需要的。
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.
}
}
答案 1 :(得分:0)
看一看 Update UI from Thread。 你应该在单独的线程上进行所有操作
AttentionalBlinkTrial theTrial = new AttentionalBlinkTrial();
theTrial.generateTargets();
theTrial.generateBlinkList(5);
并且只在UI线程上设置文本。