Android 控制线程的暂停和恢复

在Android中有时我们会遇到类似这样的问题,我要绘制一个曲线图,但是我想让它可以被暂停和继续。首先,绘图肯定得用到多线程的知识。java的Thread类中自带suspend和resume两个方法来实现线程的暂停和恢复,可惜的是,现在已经不被建议使用了,而且,就算你用了,也没什么卵用,根本没效果,哈哈(这就很尴尬了!)

网上查了不少资料(在这里感谢网上一些博客的指导了),经过修改,哈,保证绝对可以用。废话不多说,先贴代码:

   
 private class MyThread extends Thread {
        private final Object lock = new Object();
        private boolean pause = false;
 
         /**
         * 调用这个方法实现暂停线程
         */
        void pauseThread() {
            pause = true;
        }
 
        /**
         * 调用这个方法实现恢复线程的运行
         */
        void resumeThread() {
            pause = false;
            synchronized (lock) {
                lock.notifyAll();
            }
        }
 
        /**
         * 注意:这个方法只能在run方法里调用,不然会阻塞主线程,导致页面无响应
         */
        void onPause() {
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
 
        @Override
        public void run() {
            super.run();
            try {
                int index = 0;
                while (true) {
                // 让线程处于暂停等待状态
                    while (pause) {
                        onPause();
                    }
                    try {
                        System.out.println(index);
                        Thread.sleep(50);
                        ++index;
                    } catch (InterruptedException e) {
                        //捕获到异常之后,执行break跳出循环
                        break;
                    }
                }
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
    }
 

 

如上代码所示,我们使用一个锁对象来实现线程的等待和继续运行,这里需要注意,使用myThread.wait()是不行的,不信可试试。还有就是onPause()方法一定只能在run方法里面执行,不然就变成让主线程等待了。

怎么启动?这个应该很简单吧,我们在别的类中执行:

 
MyThread my = new MyThread();
Thread thread = new Thread(my);
thread.start();
 

暂停的话,只需执行:

pauseThread();

恢复线程运行:

resumeThread();
 
 

 

你可能感兴趣的:(Thread,thread,android)