Androidの多线程之Handler创建新线程
来源:互联网 发布:查看端口占用linux 编辑:程序博客网 时间:2024/06/05 18:04
两个Handler,一个是主线程的mainHandler,一个是获取HandlerThread的looper的Handler.
mainHandler在新线程发出消息,在主线程处理接受的消息。
looperHandler拥有looper后即可post(Runnable),发起新线程,然后通过mainHandler在新线程里发送消息到主线程的handler。
这里创建两个handler,一个是mainHandler维护主线程的looper,一个是looperHandler拥护HandlerThread的looper。
1.mainHandler处理消息,复写handlerMessage()方法处理消息。
2.looperHandler应通过HandlerThread获取looper来构造,而且HandlerThread必须开启,否则得不到looper。
3.looperHandler来post一个runnable对象,在runnable里复写run()方法,在里面用mainHandler发送方消息。
1 package com.bvin.handler; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.os.Handler; 6 import android.os.HandlerThread; 7 import android.os.Message; 8 import android.util.Log; 9 import android.view.View;10 import android.widget.Button;11 import android.widget.LinearLayout;12 import android.widget.LinearLayout.LayoutParams;13 import android.widget.TextView;14 15 public class MainActivity extends Activity {16 /** Called when the activity is first created. */17 18 private Handler loopHandler ;19 private Handler mainHandler; 20 private TextView tv;21 @Override22 public void onCreate(Bundle savedInstanceState) {23 super.onCreate(savedInstanceState);24 25 initViews();26 HandlerThread ht = new HandlerThread("handler thread");27 ht.start();//loopHandler的runnable这里先开始le,而mainHandler是点击之后28 loopHandler = new Handler(ht.getLooper());29 mainHandler= new Handler(){30 31 @Override32 public void handleMessage(Message msg) {33 // TODO Auto-generated method stub34 super.handleMessage(msg);35 if(msg.what==2012){36 37 tv.setText(msg.getData().getString("s"));38 }39 40 }41 };42 }43 44 45 private void initViews(){46 47 LinearLayout layout = new LinearLayout(this);48 layout.setOrientation(LinearLayout.VERTICAL);49 LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);50 tv = new TextView(this);51 tv.setText("本来");52 Button bt = new Button(this);53 54 bt.setText("开动");55 bt.setOnClickListener(new View.OnClickListener() {56 57 @Override58 public void onClick(View v) {59 // TODO Auto-generated method stub60 mainHandler.post(new Runnable(){61 62 @Override63 public void run() {64 // TODO Auto-generated method stub65 Log.e("mainHandler所在当前线程", ""+Thread.currentThread().getName());66 //tv.setText("对不对");67 }68 });69 70 loopHandler.post(new Runnable(){71 72 @Override73 public void run() {74 // TODO Auto-generated method stub75 Log.e("loopHandler所在当前线程", ""+Thread.currentThread().getName());76 Message msg = mainHandler.obtainMessage();77 msg.what = 2012;78 Bundle bundle = new Bundle();79 bundle.putString("s", "从"+Thread.currentThread().getName()+"线程传过来的");80 msg.setData(bundle);81 msg.sendToTarget();82 }83 });84 85 }86 });87 layout.addView(bt,params);88 layout.addView(tv,params);89 setContentView(layout);90 91 }92 }
- Androidの多线程之Handler创建新线程
- 多线程之Handler创建新线程
- 浅谈Android之于新线程创建Handler
- c++ 多线程编程之创建新线程
- 【多线程-创建新线程】
- Android之Handler在新线程中处理消息
- Android之Handler在新线程中处理消息
- Android之Handler在新线程中处理消息
- Android之Handler在新线程中处理消息
- Android--多线程之Handler
- Android--多线程之Handler
- Android--多线程之Handler
- Android--多线程之Handler
- Android--多线程之Handler
- Android--多线程之Handler
- Android--多线程之Handler
- Android 多线程之Handler
- Android--多线程之Handler
- Androidの遇到的问题集合之MaginPadding
- C语言文件读写函数——fputc和fgetc
- Androidの多线程之数Looper通信
- Androidの多线程之更新ui(Thread+Handler+Message)
- Androidの多线程之更新ui(AsyncTask)
- Androidの多线程之Handler创建新线程
- Androidの多线程之多线程用法大集合(未整理)
- Javaの二进制之整形输出二进制
- 【Python基础】之has_key(key) or key in d
- Javaの位操作之规律集合
- 常用算法之分治算法
- AndroidのUI之视图缓存
- Javaの堆栈之堆与栈的区别
- AndroidのActivity之退出返回栈