私はアンドロイドで非常に新しいです。Android開発者のWebサイトで、Androidスレッドに関する2つのルールを見ました:
1 : Do not block the UI thread
2 : Do not access the Android UI toolkit from outside the UI thread
Android SDK の LunarLander Sample を見ると、次のコードが表示されます。
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 フレームワークのスレッド化の 2 番目の規則に違反していないのはなぜですか?
読んでくれてありがとう。