Android :一段代码理解Handler的工作机制

如下的代码实现一个Iphone 上的一个通过按backspace键后,数字过多消除的按钮事件。事件的原理如下,事件要的效果是这样的,当长按消除按钮后,数字会慢慢消除,当消除5个字符后继续消除的话消除速度会增快。通过这份代码可以帮助我们较好的初识Handler的工作机制。

//http://www.jcodecraeer.com
package com.william.handlertest; 
import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
public class HandlerTest extends Activity implements Runnable{ 
    private EditText content = null; 
    private Button backspace = null; 
    private boolean isStop = false; 
    private Handler mHandler = null; 
    private class BackspaceOnTouchListener implements Button.OnTouchListener{ 
        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
            switch(event.getAction()){ 
            case MotionEvent.ACTION_DOWN: 
                isStop = true; 
                mHandler = getHandler(content); 
                new Thread(HandlerTest.this).start(); 
                break; 
            case MotionEvent.ACTION_UP: 
                isStop = false; 
                break; 
            default: 
                break; 
            } 
            return false; 
        } 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        content = (EditText) findViewById(R.id.content); 
        content.setCursorVisible(false); 
        backspace = (Button) findViewById(R.id.backspace); 
        backspace.setOnTouchListener(new BackspaceOnTouchListener()); 
    } 
    private Handler getHandler(final TextView content){ 
        return new Handler(){ 
            @Override 
            public void handleMessage(Message msg) { 
                content.setText((String)msg.obj); 
                super.handleMessage(msg); 
            } 
        }; 
    } 
    @Override 
    public void run() { 
        try{ 
            int i = 0; 
            do{ 
                i++; 
                Thread.sleep((i > 5 ? 100 : 500)); 
                String contentStr = this.content.getText().toString(); 
                if(contentStr.length()==0){ 
                    break; 
                } 
                contentStr = contentStr.substring(0, contentStr.length()-1); 
                Message msg = mHandler.obtainMessage(); 
                msg.obj=contentStr; 
                msg.sendToTarget(); 
            }while(isStop); 
        }catch(Exception e){ 
            e.printStackTrace(); 
        } 
    } 
}