Android中的java层的线程暂停和恢复实现
2013-12-12 12:07
453 查看
/**
* 基础线程对象.
*
* @author jevan
* @version (1.0 at 2013-6-17)
* @version (1.1 at 2013-7-2) 增加onDestory接口{@link #onDestory()},增加stop方法{@link #stop() }。
*/
public
abstract
class BaseThread implements Runnable {
public
static
final
int SUSPEND_TIME_MILLISECONDS = 50;
private String name;
private Thread mThread;
private
boolean suspendFlag = false;// 控制线程的执行
// private int i = 0;
private String TAG = getName();
/**
* 构造函数
* @param name 线程名称。
* @param suspend 初始化是否暂停。
*/
public BaseThread(String name, boolean suspend) {
suspendFlag = suspend;
this.name = name;
mThread = new Thread(this, name);
System.out.println("new Thread: " + mThread);
mThread.start();
}
public
void run() {
try {
while (true) {
// System.out.println(name + ": " + i++);
synchronized (this) {
while (suspendFlag) {
wait();
}
}
Thread.sleep(SUSPEND_TIME_MILLISECONDS);
process();
}
} catch (InterruptedException e) {
e.printStackTrace();
onDestory();
}
Log.i(TAG, name + " exited");
}
/**
* 线程处理接口。
*/
public
abstract
void process();
/**
* 线程暂停
*/
public
void suspend() {
this.suspendFlag = true;
}
/**
* 唤醒线程
*/
public
synchronized
void resume() {
this.suspendFlag = false;
notify();
}
/**
* 返回线程名
*
* @return name
*/
public String getName() {
return name;
}
/**
* 获取线程对象。
*
* @return 线程对象。
*/
public Thread getT() {
return mThread;
}
/**
* 停止线程运行。
*/
public
void stop() {
if (mThread != null){
mThread.interrupt();
mThread = null;
}
}
/**
* 线程处理接口。
*/
public
void onDestory()
{
Log.i(TAG, name + " destory!");
}
}
* 基础线程对象.
*
* @author jevan
* @version (1.0 at 2013-6-17)
* @version (1.1 at 2013-7-2) 增加onDestory接口{@link #onDestory()},增加stop方法{@link #stop() }。
*/
public
abstract
class BaseThread implements Runnable {
public
static
final
int SUSPEND_TIME_MILLISECONDS = 50;
private String name;
private Thread mThread;
private
boolean suspendFlag = false;// 控制线程的执行
// private int i = 0;
private String TAG = getName();
/**
* 构造函数
* @param name 线程名称。
* @param suspend 初始化是否暂停。
*/
public BaseThread(String name, boolean suspend) {
suspendFlag = suspend;
this.name = name;
mThread = new Thread(this, name);
System.out.println("new Thread: " + mThread);
mThread.start();
}
public
void run() {
try {
while (true) {
// System.out.println(name + ": " + i++);
synchronized (this) {
while (suspendFlag) {
wait();
}
}
Thread.sleep(SUSPEND_TIME_MILLISECONDS);
process();
}
} catch (InterruptedException e) {
e.printStackTrace();
onDestory();
}
Log.i(TAG, name + " exited");
}
/**
* 线程处理接口。
*/
public
abstract
void process();
/**
* 线程暂停
*/
public
void suspend() {
this.suspendFlag = true;
}
/**
* 唤醒线程
*/
public
synchronized
void resume() {
this.suspendFlag = false;
notify();
}
/**
* 返回线程名
*
* @return name
*/
public String getName() {
return name;
}
/**
* 获取线程对象。
*
* @return 线程对象。
*/
public Thread getT() {
return mThread;
}
/**
* 停止线程运行。
*/
public
void stop() {
if (mThread != null){
mThread.interrupt();
mThread = null;
}
}
/**
* 线程处理接口。
*/
public
void onDestory()
{
Log.i(TAG, name + " destory!");
}
}
相关文章推荐
- Android中的socket本地通讯框架
- Android中java层使用LocalSocket和底层进行通讯
- Android查看stdout 和stderr
- This Handler class should be static or leaks might occur Android
- Android中的应用!!!!
- 【转】Android中APK安装过程及原理解析
- Android新增输入设备
- android使用C开发
- Android加载大图片OOM异常解决
- Android NotificationManager 和Notification的使用总结
- android的单元测试
- Android 获取当前系统时间
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android 代码里 用log打印 该行的类名、文件名、方法名、行号等信息
- Android夜间模式的几种实现
- android 显示单位 像素
- 用css写个android机器人代码分享
- android Intent常用标识
- Android GestureDetector手势识别类
- 记录日志