Android Hander的使用
16lz
2021-01-23
//第一种使用new Thread() {public void Run() {try {mHandler.post(new Runnable() {@Overridepublic 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{@Overridepublic 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() {@Overridepublic 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(){@Overridepublic 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()){@Overridepublic void handleMessage(Message msg) {mTextView.setText("ThreadName------------"+Thread.currentThread());}};mHandler.sendEmptyMessage(1);
主线程与子线程之间的信息交互
private TextView mTextView;private TextView mTextView2;private Button Btn1;private Button Btn2;// 主线程的Handlerprivate Handler MainHandler = new Handler() {public void handleMessage(Message msg) {Message msgMessage =new Message();mTextView2.setText("住线程");threadHandler.sendMessageDelayed(msgMessage, 1000);};};// 子线程Handlerprivate 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() {@Overridepublic 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更新UInew Thread(){public void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}mHandler.post(new Runnable() {@Overridepublic 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() {@Overridepublic void run() {mTextView.setText("asdasd");}});}
//第四种 使用控件自带的方法更新 在子线程中直接调用 public void ViewUI(){mTextView.post(new Runnable() {@Overridepublic void run() {mTextView.setText("asdasd");}});}
更多相关文章
- android listview 与 一般多线程配合产生的错误,资料汇总
- GPS开发常用方法 和用Criteria确定android location providerGPS
- Android Dialog触摸对话框外部让其消失的实现方法
- Android消息通知Totast的实现
- android 获取当前时间的方法
- Android ScrollView嵌套ViewPager不显示和出现空白部分 解决方法
- Android查询所有联系人和根据号码查询联系人方法
- Android系统信息查看方法
- 文件多线程下载实现