Android Handler

Posted 致林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android Handler相关的知识,希望对你有一定的参考价值。

android中不允许子线程修改页面,需要使用Handler解决。

示例:

public class HandlerPostActivity1 extends Activity {
     private Button btnMes1,btnMes2;
     private TextView tvMessage;
     // 声明一个Handler对象
     private static Handler handler=new Handler();
    
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.message_activity);        
         
         btnMes1=(Button)findViewById(R.id.btnMes1);
         btnMes2=(Button)findViewById(R.id.btnMes2);
         tvMessage=(TextView)findViewById(R.id.tvMessage);
         btnMes1.setOnClickListener(new View.OnClickListener() {
             
             @Override
             public void onClick(View v) {
                 // 新启动一个子线程
                 new Thread(new Runnable() {                    
                     @Override
                     public void run() {
                         // tvMessage.setText("...");
                         // 以上操作会报错,无法再子线程中访问UI组件,UI组件的属性必须在UI线程中访问
                         // 使用post方式修改UI组件tvMessage的Text属性
                         handler.post(new Runnable() {                    
                             @Override
                             public void run() {
                                 tvMessage.setText("使用Handler.post在工作线程中发送一段执行到消息队列中,在主线程中执行。");                        
                             }
                         });                                
                     }
                 }).start();
             }
         });
         
         btnMes2.setOnClickListener(new View.OnClickListener() {
             
             @Override
             public void onClick(View v) {
                 new Thread(new Runnable() {                    
                     @Override
                     public void run() {
                         // 使用postDelayed方式修改UI组件tvMessage的Text属性值
                         // 并且延迟3S执行
                         handler.postDelayed(new Runnable() {
                             
                             @Override
                             public void run() {
                                 tvMessage.setText("使用Handler.postDelayed在工作线程中发送一段执行到消息队列中,在主线程中延迟3S执行。");    
                                 
                             }
                         }, 3000);                        
                     }
                 }).start();
                 
             }
         });
     }
 }

 

以上是关于Android Handler的主要内容,如果未能解决你的问题,请参考以下文章

什么时候可以在android中使用强引用,这个代码是否泄漏?

Android之Handler源代码深入解析

android中的handler使用之四

android中的handler使用之三

Android Handler消息机制核心代码

Android Handler消息机制核心代码