android Handler 基础知识入门

来源:互联网 发布:2017学php好找工作吗 编辑:程序博客网 时间:2024/06/06 04:58

常见问题

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()

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

这里写图片描述

0 0
原创粉丝点击