android几种异步处理情况笔记

android几种异步处理情况笔记

Handler类:

1

在子线程中发送Message

2

在主线程中获取、处理Message

在新线程中 通过Handler机制通知UI线程改变界面。

每个线程只能拥有一个Looper,而每个Looper关联一个MessageQueue

UI线程中,系统默认初始化了一个Looper对象。

Looper、MessageQueue、Handler的作用如下:

1 Looper:

每个线程只有一个Looper,它负责管理MessageQueue;通过Looper.loop()方法会不断从MssageQueue中取出Message且通过msg.target.dispatchMessage(msg)分发Message给对应的Handler;

2 MessageQueue:

由Looper负责管理,它通过队列的先进先出来管理Message。

3 Handler:

它能把Message发给MessageQueue,并负责处理Looper分发给他的对应的Message。

Message是通过Handler对象发给MessageQueue的,而MessageQueue是由Looper负责创建的。所以在线程中使用Handler分3步:

1 Looper.prepare()

2

重写Handler的handleMessage(Message

msg)创建Handler子类对象

3 Looper.loop()

如何在新线程中创建Looper对象呢

private class CalThread extends Thread {

public Handler handler;

public void run() {

Looper.prepare();

handler = new Handler() {

@Override

public void handleMessage(Message msg) {

// handler

接收、处理Message

}

}

Looper.loop();

}

}

mCalThread = new CalThread().start();

Message msg = new Message();

msg.what = 0x123;

Bundle data = new Bundle();

data.putInt(EXTRA_DATA, 11111);

msg.setData(data);

// 主线程向子线程发送Message,在子线程中接收、处理Message (耗时操作在子线程中处理)

mCalThread.handler.sendMessage(msg);

//

子线程向主线程发送Message,在主线程中接收、处理Message(一般用来修改UI)

UI线程主要负责处理用户的按键事件、用户触屏事件及屏幕绘图事件。

新线程中更新UI的几种操作:

1

使用Handler实现线程之间的通信

2 Activity.runOnUiThread(Runable)

3 View.post(Runable)

4 View.postDelayed(Runable, long)

AsyncTask是为了简化2、3、4的操作,适用于简单的异步处理。

AsyncTask

使用AsyncTask注意事项:

1

必须在UI线程中创建AsyncTask的实例

2

必须在UI线程中调用AysncTask的execute()

3 AsysncTask

各种回调方法不能手动调用,只能由系统调用

4

每个AsyncTask只能执行一次。

你可能感兴趣的:(android几种异步处理情况笔记)