android开发教程之handle实现多线程和异步处理

2019-12-10 20:11:52刘景俊

        startButton.setOnClickListener(new StartListener()); 
        endButton = (Button)findViewById(R.id.end); 
        endButton.setOnClickListener(new EndListener()); 
    } 

    class StartListener implements OnClickListener{ 

        @Override 
        public void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            handler.post(HandlerThread); 
        } 

    } 

    class EndListener implements OnClickListener{ 
        @Override 
        public void onClick(View arg0) { 
            // TODO Auto-generated method stub 
            handler.removeCallbacks(HandlerThread); 
        } 

    } 

    Runnable HandlerThread = new Runnable() { 

        @Override 
        public void run() { 
            // TODO Auto-generated method stub 
            System.out.println("HandlerThread is Running......"); 
            handler.postDelayed(HandlerThread, 3000); 
        } 
    }; 

 

我们可以看到,在Activity中对两个按钮分别绑定了事件监听器,还创建了Handler的一个实例,以及创建了一个匿名内部类,是一个实现Runnable接口的线程HandlerThread。

当start按钮按下时,即会执行handler.post(HandlerThread);这一句代码,之前说过,Handler用一个线程队列,这句代码即是把HandlerThread这个线程加入了handler的线程队列中,因为加入的这个HandlerThread是第一个线程,因此它会马上执行它的run()方法。在run()方法中,handler.postDelayed(HandlerThread, 3000);又再一次将HandlerThread放入handler的线程队列中,这里设置了3000ms的延迟。这样,整个程序会不断地运行,且每隔3000ms在LogCat中打印出"HandlerThread is Running......"。