android Handler 基础知识入门

常见问题

This message is already in use.


08-12 12:02:42.678: E/AndroidRuntime(5417): android.util.AndroidRuntimeException: { when=-318ms what=0 arg1=1 target=com.tomchen.smsbomb.view.FastChangeTextView$1 } This message is already in use.

Solution

加上 msg = mHandler.obtainMessage();

    @Override
    public void handleMessage(Message msg) {
        switch (msg.arg1) {

        case UPDATE:

            if (currentValue < value) {
                Log.i(tag, "in mHandler UPDATE CASE");
                setText(df.format(currentValue));
                currentValue = currentValue + rate;
                //add this line
                msg = mHandler.obtainMessage();
                msg.arg1 = UPDATE;

                sendMessageDelayed(msg, 30);
            } else {
                setText(df.format(value));
            }

            break;

        default:
            break;

        }
        super.handleMessage(msg);
    }

};

Handler 谷歌 官方文档学习

sendMessageDelayed 和sendEmptyMessageDelayed

sendMessageDelayed(Message msg, long delayMillis)

Enqueue a message into the message queue after all pending messages before (current time + delayMillis).


sendEmptyMessageDelayed(int what, long delayMillis)

Sends a Message containing only the what value, to be delivered after the specified amount of time elapses.


简单说, 就是sendMessageDelayed 发送 Message, sendEmptyMessageDelayed 发送一个只包含what的Message

上文把代码可以改成sendEmptyMessageDelayed

switch 也要改成从what 取出标记值

private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {

            case UPDATE:

                if (currentValue < value) {
                    setText(df.format(currentValue));
                    currentValue = currentValue + rate;
                    sendEmptyMessageDelayed(UPDATE, 30);
                } else {
                    setText(df.format(value));
                }

                break;

            default:
                break;

            }
            super.handleMessage(msg);
        }

    };

Note

sendEmptyMessageDelayed 不需要 obtainMessage()

如果文章对您有帮助,请多多支持^=^

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值