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

 

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)反射调用方法并利用此方法展开android通知栏(兼容4.
  3. 这可能是最好的 Android/Kotlin日志输出方法
  4. Android(安卓)Trick 11: 对Android中的AsyncTask进行函数化的封
  5. 【SMS】android 短信接收流程分析——-拦截短信示例代码
  6. Android(安卓)四种线程池
  7. 这一年半以来,关于 Android,我都写了些什么?(一)
  8. android线程 Handler Message Queue AsyncTask线程模型 线程交互
  9. 10个提高Android(安卓)App性能的建议

随机推荐

  1. Android(安卓)Stuido 实现多渠道打包
  2. Android.mk写法
  3. 在eclipse中搭建android开发平台
  4. 我的android 第25天 - 使用ContentResolv
  5. Android(安卓)应用的耗电量优化
  6. android values 资源说明
  7. Android开发通知栏的那些事
  8. 【Android】第6章(3) AlertDialog(警告对话
  9. Android进程保活学习记录
  10. Android长按连续触发的具体实现