zoukankan      html  css  js  c++  java
  • 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();
                     
                 }
             });
         }
     }
  • 相关阅读:
    BufferedImage学习记录一
    response总结一
    Externalizable接口
    request 总结一
    处理jsp显示文字过长问题
    验证码设计
    ORA01461: 仅能绑定要插入 LONG 列的 LONG 值
    MAP平台在单据中填写好部门后,关闭后重新打开,部门就没有了
    MAP平台设置节点选取范围
    MAP平台java.lang.StackOverflowError
  • 原文地址:https://www.cnblogs.com/bincoding/p/5263156.html
Copyright © 2011-2022 走看看