handler怎么实现线程切换 Looper的功能?

[更新]
·
·
分类:互联网
4870 阅读

handler怎么实现线程切换

Looper的功能?

Looper的功能?

Looper的主要功能是负责管理MessageQueue,会不断从MessageQueue中取出消息,并将消息分给对应的Handler来处理。每个线程只允许有一个Looper,且主线程中,系统已经初始化好了一个Looper对象。
Toast运行的线程中也需要Looper对象的支持,若要想Toast能在子线程中运行,便需要手动创建一个Looper对象。

android里面所说的looper是什么意思啊?

Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。
Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。
MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。
Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。
Thread:线程,负责调度整个消息循环,即消息循环的执行场所

moqo view使用方法?

1.写一个类继承View类,一般要重写ondraw方法。一般而言我们去自己绘制一个view,在另一个activity中setContentView(view)去引用它。
public class GameView extends View {
static int count 0 ;
static int y 0;
public GameView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
if (count100) {
count ;
}
else {
count 0 ;
}
Paint paint new Paint();
switch (count%4) {
case 0:
();
break;
case 1:
();
break;
case 2:
();
break;
case 3:
();
break;
}
canvas.drawRect((320-80)/2, y, (320-80)/2 80, y 40, paint);
super.onDraw(canvas);
}
}
2
写一个activity。
public class ViewTestActivity extends Activity {
/** Called when the activity is first created. */
public static GameView gameView;
public static Handler handler new Handler(){
@Override
public void handleMessage(Message msg) {
if (msg.what 11) {
}
super.handleMessage(msg);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
gameView new GameView(this);
setContentView(gameView);
new Thread(new GameThread()).start();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case _DPAD_DOWN:
GameView.y 3;
break;
case _DPAD_UP:
GameView.y-3;
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return true;
}
}
class GameThread implements Runnable{
@Override
public void run() {
while (!().isInterrupted()) {
try {
(100);
} catch (InterruptedException e) {
();
().interrupt();
}
();//使用postnvalidate可以直接在线程中更新界面
}
}
}