我对android很陌生。我在 android 开发者网站上看到了关于 android 线程的两条规则:
1 : Do not block the UI thread
2 : Do not access the Android UI toolkit from outside the UI thread
如果您查看 android sdk 的 LunarLander 示例,您可以看到以下代码:
class LunarView extends SurfaceView implements SurfaceHolder.Callback {
//...
public LunarView(Context context, AttributeSet attrs) {
class LunarThread extends Thread {
//...
private void doDraw(Canvas canvas) {
//do some drawing on the canvas
}
}
//...
public LunarView(Context context, AttributeSet attrs) {
super(context, attrs);
// ...
// create thread only; it's started in surfaceCreated()
thread = new LunarThread(holder, context, new Handler() {
@Override
public void handleMessage(Message m) {
mStatusText.setVisibility(m.getData().getInt("viz"));
mStatusText.setText(m.getData().getString("text"));
}
});
//...
}
//...
}
如您所见,我们正在创建一个渲染视图的新线程。
为什么这段代码不违反 android 框架线程的第二条规则?
谢谢阅读。