在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(安卓)Studio3.0开发JNI流程------JNI接口函数和指针
  3. [Android(安卓)5.1] 多用户管理UserManager相关整理
  4. 新建Android(安卓)AVD,点击start、launch,出现进度条后无任何反应,
  5. Android(安卓)组件样式定制方法详解
  6. 说说Android桌面(Launcher应用)背后的故事(六)——研究Launcher
  7. android webview js交互之自定义错误加载界面(重新刷新)
  8. 东拼西凑写的android 相机例子,包含一些遇到的坑
  9. 浅浅的介绍一下android里面Handler、Looper、Message和MessageQu

随机推荐

  1. 【Android Studio】Manifest Merger
  2. android各个版本的区别——API变更
  3. Android中颜色透明度对应16进制值
  4. android jni 多线程编程 join thread
  5. Android中解析xml的几种方式
  6. Android NDK, Revision 8b 发布
  7. Android Studio 3.0 gradle提示太老 解决
  8. android 数据库
  9. Android开发视频教程
  10. android系统编译的网站