您的位置:首页 > 移动开发 > Android开发

Android Hander的使用

2015-06-17 18:25 330 查看
//第一种使用
new Thread() {
public void Run() {
try {
mHandler.post(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根

TxtView.setText("asdasd");
}
});
Thread.sleep(1000);

} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}.start();;

//第二种

MyRunable mMyRunable=new MyRunable();
public class MyRunable implements Runnable{

@Override
public void run() {
ImageIndex++;
ImageIndex=ImageIndex%3;
Img.setImageResource(ImageID[ImageIndex]);
mHandler.postDelayed(mMyRunable, 1);
}

}

mHandler.postDelayed(mMyRunable, 1);


//第三种

Handler mHandler3=new Handler(new Handler.Callback() {

@Override
public boolean handleMessage(Message msg) {
Toast.makeText(getApplicationContext(), ""+1, Toast.LENGTH_SHORT).show();
return false;
}
}){
public void handleMessage(Message msg){
Toast.makeText(getApplicationContext(), ""+2, Toast.LENGTH_SHORT).show();

}
};

mHandler3.sendEmptyMessage(10000);


//第四种

Handler mHandler2=new Handler(){

@Override
public void handleMessage(Message msg) {
TxtView.setText(msg.arg1+"-"+msg.arg2+"-"+msg.obj);
}

};
Message message=new Message();
message.arg1=88;
message.arg2=100;
message.obj=100;//任意OBJECT类型  实体类
mHandler2.sendMessage(message);
Hnader  Looper  MessageQueue  之间的关系

Hnader负责发送消息    Looper负责接收Hnader发送的消息 并直接把消息回传给Hnader自己,MessageQueue就是一个储存消息的容器

HandlerThread 的用法

private TextView mTextView;

private HandlerThread mHandlerThread;

private Handler mHandler;

mTextView=(TextView)findViewById(R.id.id_txt);
mHandlerThread=new HandlerThread("ThreadName");
mHandlerThread.start();
mHandler=new Handler(mHandlerThread.getLooper()){
@Override
public void handleMessage(Message msg) {
mTextView.setText("ThreadName------------"+Thread.currentThread());
}
};
mHandler.sendEmptyMessage(1);


主线程与子线程之间的信息交互

private TextView mTextView;
private TextView mTextView2;
private Button Btn1;
private Button Btn2;

// 主线程的Handler
private Handler MainHandler = new Handler() {
public void handleMessage(Message msg) {
Message msgMessage =new Message();
mTextView2.setText("住线程");
threadHandler.sendMessageDelayed(msgMessage, 1000);
};
};
// 子线程Handler
private Handler threadHandler;

mTextView = (TextView) findViewById(R.id.id_txt);
mTextView2 = (TextView) findViewById(R.id.id_txt2);
Btn1 = (Button) findViewById(R.id.button1);
Btn2 = (Button) findViewById(R.id.button2);
HandlerThread mHandlerThread = new HandlerThread("MainThread");
mHandlerThread.start();
threadHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Message msgMessage =new Message();
mTextView2.setText("子线程");
MainHandler.sendMessageDelayed(msgMessage, 1000);
}
};
Btn1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MainHandler.sendEmptyMessage(1);
}
});
Btn2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
MainHandler.removeMessages(1);
threadHandler.removeMessages(1);
}
});


Android中更新UI的几种方式
//第一种

private Handler mHandler=new Handler(){
public void handleMessage(Message msg) {

};
};
//第一种  通过Hnadler更新UI
new Thread(){
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
mHandler.post(new Runnable() {
@Override
public void run() {
mTextView.setText("asdasd");
}
});
};
}.start();


//第二种更新UI的方法
private Handler mHandler=new Handler(){
public void handleMessage(Message msg) {
mTextView.setText("asdasd");
};
};
new Thread(){
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
Handler2();
};
}.start();

public void Handler2(){
mHandler.sendEmptyMessage(1);
}
//第三种是用内置函数   在子线程中直接调用
public void UpdayeUI()
{
runOnUiThread(new Runnable() {

@Override
public void run() {
mTextView.setText("asdasd");

}
});
}//第四种 使用控件自带的方法更新   在子线程中直接调用
public void ViewUI(){
mTextView.post(new Runnable() {

@Override
public void run() {
mTextView.setText("asdasd");

}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: