Android Hander的使用

//第一种使用
		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");
				
			}
		});
	}







你可能感兴趣的:(Android)