1. /**
  2.  * 基础线程对象.
  3.  *
  4.  * @author jevan
  5.  * @version (1.0 at 2013-6-17)
  6.  * @version (1.1 at 2013-7-2) 增加onDestory接口{@link #onDestory()},增加stop方法{@link #stop() }。
  7.  */
  8. public
    abstract
    class BaseThread implements Runnable {
  9.    public
    static
    final
    int SUSPEND_TIME_MILLISECONDS = 50;
  10.  
  11.    private String name;
  12.    private Thread mThread;
  13.  
  14.    private
    boolean suspendFlag = false;// 控制线程的执行
  15.    // private int i = 0;
  16.    private String TAG = getName();
  17.  
  18.    /**
  19.     * 构造函数
  20.     * @param name 线程名称。
  21.     * @param suspend 初始化是否暂停。
  22.     */
  23.    public BaseThread(String name, boolean suspend) {
  24.       suspendFlag = suspend;
  25.       this.name = name;
  26.       mThread = new Thread(this, name);
  27.       System.out.println("new Thread: " + mThread);
  28.       mThread.start();
  29.    }
  30.  
  31.    public
    void run() {
  32.       try {
  33.          while (true) {
  34.             // System.out.println(name + ": " + i++);
  35.             synchronized (this) {
  36.                while (suspendFlag) {
  37.                   wait();
  38.                }
  39.             }
  40.             Thread.sleep(SUSPEND_TIME_MILLISECONDS);
  41.             process();
  42.          }
  43.       } catch (InterruptedException e) {
  44.          e.printStackTrace();
  45.          onDestory();
  46.       }
  47.       Log.i(TAG, name + " exited");
  48.    }
  49.  
  50.    /**
  51.     * 线程处理接口。
  52.     */
  53.    public
    abstract
    void process();
  54.  
  55.    /**
  56.     * 线程暂停
  57.     */
  58.    public
    void suspend() {
  59.       this.suspendFlag = true;
  60.    }
  61.  
  62.    /**
  63.     * 唤醒线程
  64.     */
  65.    public
    synchronized
    void resume() {
  66.       this.suspendFlag = false;
  67.       notify();
  68.    }
  69.  
  70.    /**
  71.     * 返回线程名
  72.     *
  73.     * @return name
  74.     */
  75.    public String getName() {
  76.       return name;
  77.    }
  78.  
  79.    /**
  80.     * 获取线程对象。
  81.     *
  82.     * @return 线程对象。
  83.     */
  84.    public Thread getT() {
  85.       return mThread;
  86.    }
  87.  
  88.    /**
  89.     * 停止线程运行。
  90.     */
  91.    public
    void stop() {
  92.       if (mThread != null){
  93.  
  94.          mThread.interrupt();
  95.          mThread = null;
  96.       }
  97.    }
  98.  
  99.    /**
  100.     * 线程处理接口。
  101.     */
  102.    public
    void onDestory()
  103.    {
  104.       Log.i(TAG, name + " destory!");
  105.    }
  106.  
  107. }

  

Android中的java层的线程暂停和恢复实现的更多相关文章

  1. Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解

    Android中实现java与PHP服务器(基于新浪云免费云平台)http通信详解 (本文转自: http://blog.csdn.net/yinhaide/article/details/44756 ...

  2. android中在java代码中设置Button按钮的背景颜色

    android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...

  3. Android中突发情况Activity数据的保存和恢复

    Android中突发情况Activity数据的保存和恢复 写在前面:在我们的APP使用的过程中,总有可能出现各种手滑.被压在后台.甚至突然被杀死的情况.所以对APP中一些临时数据或关键持久型数据,就需 ...

  4. Android Multimedia框架总结(四)MediaPlayer中从Java层到C++层类关系及prepare及之后其他过程

    转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52420803 前言:在上篇中,分析了MediaPl ...

  5. 在android 中开发java.net.SocketException: socket failed: EACCES (Permission denied) 报错

    在android中下载文件,写好下载文件的代码后需要配置相应的权限 <uses-permission android:name="android.permission.INTERNET ...

  6. [转] android 中 任务、进程和线程的区别

    PS: handler的目的是在组件进程中开辟一个线程作为消息的poller,收到消息后可以更新Activity中的控件(特殊的view) 任务.进程和线程     关于Android中的组件和应用, ...

  7. 在Android中使用Java 8的lambda表达式

    作为一名Java开发者,或许你时常因为缺乏闭包而产生许多的困扰.幸运的是:Java's 8th version introduced lambda functions给我们带来了好消息;然而,这咩有什 ...

  8. (转载)Android开发——Android中常见的4种线程池(保证你能看懂并理解)

    0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...

  9. Android开发——Android中常见的4种线程池(保证你能看懂并理解)

    0.前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用 ...

随机推荐

  1. 使用SigbalR发送通知

    微信商城使用支付宝支付的时候,需要有个过度页面提示用户用浏览器打开页面去支付,等用户在浏览器支付完之后再打开微信(微信此时依旧显示的是过度页面),过度页面需要跳转到订单详情页面.那么这个过度页面怎么知 ...

  2. Eclipse中debug调试java代码一直报Source not found的解决办法

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  3. 【CNMP系列】CentOS7.0下安装FTP服务

    一个小插曲,安装一个FTP服务,便于和远程服务器的文件沟通.后续我们会讲到如何使用Capistrano配合git完成服务器的代码部署以及发布流程.现在,代码先走FTP吧,挺稳. FTP简介 FTP 是 ...

  4. Asp.net mvc 4.0 高级编程 百度云下载

    Asp.net mvc 4.0 高级编程 百度云下载地址:链接:http://pan.baidu.com/s/1o6zFvOe 密码:xyss 1.基于 ASP.NET MVC4.0 + WebAPI ...

  5. Nginx rewrite(重读)

    Nginx Rewrite规则相关指令  Nginx Rewrite规则相关指令有if.rewrite.set.return.break等,其中rewrite是最关键的指令.一个简单的Nginx Re ...

  6. lxc.conf解析&lxc容器能力

    lxd启动容器实际是生成lxc.conf.剩下的就是LXC对容器进行控制了.所以可认为lxc.conf就是lxd和lxc之间主要的接口.lxc.conf详细属性参考: http://manpages. ...

  7. 《深入理解Java虚拟机》学习笔记之内存回收

    垃圾收集(Garbage Collection,GC)并不是Java语言的半生产物,事实上GC历史远比Java久远,真正使用内存动态分配和垃圾收集技术的语言是诞生于1960年的Lisp语言.经过半个世 ...

  8. ajax基础部分

    今天讲了ajax的组成及使用方法:首先我们看看一个简单的ajax的例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition ...

  9. Struts2中Action配置的三种方式

    <!-- 方案一:一个action对应一个方法; --> <action name="add" class="com.gxxy.struts.kp03_ ...

  10. spring知识点全部复习

    一. 专业术语 侵入式设计 引入框架,对现有的类的结构有影响,即需要实现或继承某些特定类.如:Struts框架 非侵入式设计 引入框架,对现有的类结构没有影响.如:Hibernate.Spring 控 ...