android thread handler


  1. 后台进行 单线程 / 多线程 运算,前台显示progressBar / progressDialog,用Thread+Handler / ExecutorService / AsyncTask.
  2. Handler的所在线程,由new Handler时调用的looper的所在线程决定。这就是为什么在UI线程中创建的handler会接收UI线程的消息队列;如果将该handler的初始化使用另一线程的looper(如HandlerThread.getLooper),那么该线程执行handleMessage时就是在另一线程中。
  3. 子线程结束,父线程才销毁
  4. 不论是Handler.post 还是 Handler.sendmessage 最后都是由MessageQueue.enqueueMessage来加入Handler的Looper的MessageQueue。数据结构是单向链表,插入算法是根据加入队列的延迟时间(方法中的一个参数)来插入到延迟比插入message大的messages中延迟最小的message之前。不带参数则是插入到队列头。
  5. 由于智能卡内的apdu发送是单线程的服务且包含一个缓冲队列,所以访问智能卡的外部方法需要用多线程异步发送远程调用方法。进行下一个远程方法发送之前,最好要根据sleep一段时间,使得卡片的apdu交互结束,再启动新的线程执行下一个远程方法。
  6. 不要用一个循环来对卡片进行远程调用,否则只能进行一次循环;必须要用多线程的异步调用。


package com.tisson;


import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;


public class AndroidTestActivity extends Activity {
private Thread t;
private ClassHandler handler = new ClassHandler();
class ClassHandler extends Handler {
public void handleMessage(Message msg) {
log("Activity:"+Thread.currentThread().getName());
new Thread(new MyThread()).start(); 
}
}

class MyThread implements Runnable {
class MyHandler extends Handler {
public void handleMessage(Message msg) {
log("Thread:"+Thread.currentThread().getName());
}
}
public void run() {
if (t.isAlive()) {
log("alive");
} else {
log("dead");
}

// Looper.prepare();
handler.sendEmptyMessage(0);
// new MyHandler().sendEmptyMessage(0); 
// Looper.loop();
}
};

private void log(String info) {
Log.e(AndroidTestActivity.class.getSimpleName(), info);
}


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
log("onCreate:"+Thread.currentThread().getName());

t = new Thread(new MyThread());
t.start();
// new Thread(new Runnable() {
// 
// @Override
// public void run() {
// // TODO Auto-generated method stub
// log("Thread:"+Thread.currentThread().getName());
// }
// }).start();
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值