6 android android-5.0-lollipop
请考虑以下代码:
new Thread() {
@Override
public void run() {
myTextView.setText("Some text");
}
}.start();
Run Code Online (Sandbox Code Playgroud)
在前Lollipop机器人上,该代码会导致CalledFromWrongThreadException异常,但为什么它在Lollipop机器人上运行良好?
测试环境:运行Android 5.1的Genymotion模拟器
代码onCreateView()在Fragment类的方法中.
这是一个时间问题,例如,在 onCreate() 中插入代码不会使应用程序在 Samsung Galaxy S3 或 Android 5.1 上的 Nexus 7 2013 上崩溃。但是,如果您修改代码以使其不断更新 TextView:
new Thread() {
@Override
public void run() {
int count = 0;
while (true) {
SystemClock.sleep(16);
((TextView) findViewById(R.id.test)).setText(count++ + "");
}
}
}.start();
Run Code Online (Sandbox Code Playgroud)
TextView.setText(String)然后,当无意中调用View.requestLayout();最终调用ViewRootImpl.requestLayout()实际上检查正确线程的第 18 次调用时,它会崩溃。这样做可能是为了将线程检查的开销降至最低。
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |