Android中Handler单独使用(不与线程结合)的理解
这个例子主要看的是
http://www.bubuko.com/infodetail-669650.html
这篇文章的例子
package com.example.runable_callback; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity { private TextView text_view = null; private Button start = null; private Button end = null; private int count = 0; //定义一个handler Handler update_handler=new Handler(); //接口的作用: Runnable updater=new Runnable(){ public void run(){ text_view.append(String.valueOf(count++)); if(count>=5){ Message message=new Message(); message.what=1; handlerStop.sendMessage(message); } update_handler.postDelayed(updater,1000); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text_view=(TextView)findViewById(R.id.text_view); start=(Button)findViewById(R.id.start); end=(Button)findViewById(R.id.end); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //发送线程接口 update_handler.post(updater); } }); end.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub count=0; //移除接口 update_handler.removeCallbacks(updater); } }); } final Handler handlerStop=new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case 1: count=0; update_handler.removeCallbacks(updater); break; } super.handleMessage(msg); } }; }
下面结合图片理解

当点击“start”按钮的时候,这个start会直接使用handler发送 Runnable这个接口到消息队列中,
然后主进程从消息队列中取出来发送过来的消息,并且执行这个Runnable接口中内容(是在主进程中执行的),相当于是更新UI
Runnable主要的作用:在TextView上附加数据显示,并且还会判断这个数字是否大于5;
如果大于5,就使用Handlerstop这个handler往主线程的消息队列中发送一个消息,
然后在分发消息的处理函数的时候,会使用Handlerstop的handleMessage函数,移除这个Runnable这个回调函数。
如果不大于5,就继续延迟1s再次调用这个Runnable接口函数,有点类似于定时器。
总结:
Handler的作用:
1. 就是发送Message到主线程中
2.在主线程中处理这些Message(使用handleMessage函数或者定义的Runnable回调函数接口)

浙公网安备 33010602011771号