Android问题:当我给一个视图设置文本时,这个视图什么时候会更新UI?这是我的案例1:
for(int i=0;i< 2000; i++){
aTextView.setText("a"+i);
}
aTextView 是一个 MyTextView,它从 TextView 扩展而来。我将 onDraw 覆盖为:
public static int counterP = 0;
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
counterP++;
Log.d("MYButton", "onDraw: " + counterP);
}
从日志中,我可以看到,打印的 counterP 不是结果。在循环中,onDraw 方法只被调用了 2-4 次。
我做了另一个测试,案例2:
boolean notInit = true;
List<String> cmdList = null;
long stSelfRefresh = 0;
String contentStr;
TextView selfTv;
public void onSelfRefreshTv(View v) {
if (cmdList == null || cmdList.isEmpty()) {
Log.e(TAG, "empty now, reset");
notInit = true;
}
if (notInit) {
cmdList = new ArrayList<String>();
for (int i = 0; i < 2000; i++) {
cmdList.add("a" + i);
}
stSelfRefresh = SystemClock.uptimeMillis();
notInit = false;
selfTv = (MyTextView) findViewById(R.id.mytv);
}
contentStr = cmdList.remove(0);
Log.d(TAG, "contentStr = " + contentStr);
selfTv.setText(contentStr);
if (!cmdList.isEmpty()) {
if (!mHandler.sendEmptyMessage(99)) {
Log.e(TAG, "SKIP my self");
}
} else {
Log.d(TAG, "Cost time: " + (SystemClock.uptimeMillis() - stSelfRefresh));
}
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 99:
onSelfRefreshTv(null);
break;
default:
break;
}
}
};
情况 2 的结果是 counterP 被打印出来。1-2000。
不知道为什么每次都会更新textView?你对此有什么想法吗?
提前致谢。
** * ***添加案例 3 * ** * ** * ****
for(int i=0;i< 2000;i++){
contentStr = cmdList.remove(0);
mHandler.sendEmptyMessage(100);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 100:
selfTv.setText(contentStr);
break;
default:
break;
}
}
};
** * ***案例 3 结束* ** * ** * *** 案例 3 的测试结果与案例 1 相似。