android中的通信机制总结1:使用handler来进行通信

使用handler来进行通信
   
handler 大家可以把它想象成主线程(UI线程)的一个子线程,它可以给主线程(UI线程)发送数据从而更新主线程(UI线程)的UI与逻辑,handler 是一个子线程所以它的耗时操作不会阻塞主线程,大家都知道在android的开发中如果代码中某个地方阻塞主线程超过5秒的话系统会提示ANR (系统提示强制关闭)所以在耗时操作上我们可以考虑开启一个子线程避免ANR。  handler会向主线程发送消息 会以队列的形式排列着配合等待主线程更新UI 逻辑 等等。
public class HandlerActivity extends Activity implements Runnable{  
  
    /**更新时间**/  
    public final static int UPDATE_TIME =0;  
    /**更新时间成功**/  
    public final static int UPDATE_COMPLETED =1;  
      
    /**记录显示时间 超过10秒结束线程**/  
    private int mShowNumber = 0;  
      
    /**开始计时按钮**/  
    private Button mButton = null;  
      
    /**计时显示内容**/  
    private TextView mTextView = null;  
     
    /**线程**/  
    private Thread mThread = null;  
     
    /**线程关闭的标志**/  
    private boolean mRunning = false;  
      
    Handler handler = new Handler() {  
    @Override  
    public void handleMessage(Message msg) {  
          
        Bundle bundle= msg.getData();  
        //通过key的名称拿到它的值  
        String  number = bundle.getString("number");  
        //msg.what为handler接收到的消息编号  
        switch(msg.what) {  
        case UPDATE_TIME:  
        mTextView.setText("正在更新时间" + number);  
        break;  
        case UPDATE_COMPLETED:  
        mTextView.setText("更新完毕");  
        break;  
        }  
        super.handleMessage(msg);  
    }  
    };  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
    setContentView(R.layout.handler);  
      
    /**拿到button 与  TextView 对象**/  
    mButton = (Button)findViewById(R.id.button0);  
    mTextView = (TextView)findViewById(R.id.textView0);  
    mThread = new Thread(this);  
      
    mButton.setOnClickListener(new OnClickListener() {  
        @Override  
        public void onClick(View arg0) {  
        /**点击按钮后开始线程开始计时**/  
        mRunning = true;  
        mThread.start();  
        }  
    });  
      
    mTextView.setText("点击按钮开始更新时间");  
    super.onCreate(savedInstanceState);  
    }  
  
    public void ShowDialog(String string) {  
    AlertDialog.Builder builder = new AlertDialog.Builder(  
        HandlerActivity.this);  
    builder.setIcon(R.drawable.icon);  
    builder.setTitle(string);  
    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
        finish();  
        }  
    });  
    builder.show();  
    }  
  
   
  
    @Override  
    public void run() {  
  
    while (mRunning) {  
        try {  
        mShowNumber++;  
        /** 把须要的数据放入bandle中 **/  
        Bundle bandle = new Bundle();  
        bandle.putString("number", String.valueOf(mShowNumber));  
  
        /** 设置这条信息的编号为更新时间 **/  
        /** 将bandle写入message中 **/  
        /** 最后将这个message发送出去 **/  
        /** mShowNumber小于10更新时间 否则更新完毕 **/  
        Message msg = new Message();  
        if(mShowNumber <=10) {  
            msg.what = UPDATE_TIME;   
        }else {  
            mRunning = false;  
            msg.what = UPDATE_COMPLETED;    
        }  
        msg.setData(bandle);  
        handler.sendMessage(msg);  
        Thread.sleep(1000);  
        } catch (InterruptedException e) {  
        e.printStackTrace();  
        }  
    }  
    }  
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值