一个关于安卓中发送消息的问

 public class MyScrollView extends ScrollView {

    private Runnable scrollerTask;
    private int initialPosition;

    private int newCheck = 100;
    private static final String TAG = "MyScrollView";

    public interface OnScrollStoppedListener{
        void onScrollStopped();
    }

    private OnScrollStoppedListener onScrollStoppedListener;

    public MyScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);

        scrollerTask = new Runnable() {
            public void run() {
                int newPosition = getScrollY();
                if(initialPosition - newPosition == 0){//has stopped
                    if(onScrollStoppedListener!=null){
                        onScrollStoppedListener.onScrollStopped();
                    }
                }else{
                    initialPosition = getScrollY();
                    MyScrollView.this.postDelayed(scrollerTask, newCheck);
                }
            }
        };
    }

    public void setOnScrollStoppedListener(MyScrollView.OnScrollStoppedListener listener){
        onScrollStoppedListener = listener;
    }

    public void startScrollerTask(){

        initialPosition = getScrollY();
        MyScrollView.this.postDelayed(scrollerTask, newCheck);
    }

}

就是在自定义的scrollview的构造方法里面,当它走else方法的时候为什么能够自己发送自己??因为平时自己的写法都是先写postdelay然后里面再写里面的runnable方法,对于他这种写法,不能理解,也不能明白为什么能够自己发送自己?求前辈们指点

private OnScrollStoppedListener onScrollStoppedListener;

public MyScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);

    scrollerTask = new Runnable() {
        public void run() {
            int newPosition = getScrollY();
            if(initialPosition - newPosition == 0){//has stopped
                if(onScrollStoppedListener!=null){
                    onScrollStoppedListener.onScrollStopped();
                }
            }else{
                initialPosition = getScrollY();
                MyScrollView.this.postDelayed(scrollerTask, newCheck);
            }
        }
    };
}

一样要先startScrollerTask()后才会开启任务,只不过任务里面递归调用而已,看一下简单的计时器原理啊。

调用startScrollerTask开启scrollerTask,在scrollerTask的run方法里面,如果else会再次调用scrollerTask,这个很正常的,不是所谓的scrollerTask调用scrollerTask,而是MyScrollView调用scrollerTask,然后scrollerTask再次响应run方法