每天一点点:android的消息

放假上来,整个人都懒了。日志也是丢了好多天,潜台词就是:我有好多天没有搞学习, 这不,今天连对话框都写不出来了,真是自惭形秽。

好不容易到开学了,这几天好好跟着老师搞,前面的东西只有点映像了,唉,真担心啊。

今天将的是android的消息机制:用于线程间的通信主要有looper,messagequeue,message,handler四部分组成

looper: 消息循环主线程中会自带一个looper,非主线程需要自己创建,创建looper的时候会自行创建一个messagequeue,内部的元素自然是message,最后是handler,他负责处理messagequeue中的第一个message。

handler有两种功能,发送消息和处理消息,用哪条线程处理消息就用谁的handler来发送消息。

今天写的是一个很小的消息传递和处理,其实本可以用一条线程就可以搞定,但是要在比较大的项目中多线程的优势才能得到体现,联系嘛,就不管那么多了。

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;


public class MessageHomeActivity extends Activity implements OnClickListener {
    private static final int MESSAGE_UPDATA = 0;


private static final int MESSAGE_STOP = 1;


/** Called when the activity is first created. */

    /**
     * 主线程的handler
     */
private Handler handler = new Handler(){

//不是必须的,只有处理消息的时候才需要重写
@Override
public void handleMessage(Message msg) {
//根据消息类别处理
switch (msg.what) {
case MESSAGE_UPDATA:
handlerUpdate(msg);
break;
case MESSAGE_STOP:
handler.removeMessages(MESSAGE_UPDATA);
break;
default:
break;
}
}


/**
* 处理Update 消息
* @param msg
* 接收到的消息
*/
private void handlerUpdate(Message msg) {
//更新UI
textview.setText(String.valueOf(msg.arg1));
//再发送一条
Message message = handler.obtainMessage(MESSAGE_UPDATA, msg.arg1+1, msg.arg2);
handler.sendMessage(message);
}
};

private TextView textview;
private Button buttonstart;
private Button buttonstop;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();
    }


private void initView() {
textview = (TextView)findViewById(R.id.textView1);
buttonstart = (Button)findViewById(R.id.buttonstart);
buttonstop = (Button)findViewById(R.id.buttonstop);

buttonstart.setOnClickListener(this);
buttonstop.setOnClickListener(this);
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonstart:
doStart();
break;
case R.id.buttonstop:
doStop();
break;
default:
break;
}
}
/**
* 停止更新:删除消息队列中what为update的消息
*/
private void doStop() {
//handler.removeMessages(MESSAGE_UPDATA);
handler.sendEmptyMessage(MESSAGE_STOP);
}


private void doStart(){
//创建一个消息
//消息的目标:如何处理消息
//消息类型:常量
//参数:初始值
//参数:更新频率
Message message = Message.obtain(handler, MESSAGE_UPDATA, 1, 1000);

//发送消息
handler.sendMessage(message);
}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值