【发布时间】:2012-05-26 19:18:06
【问题描述】:
是否可以重写此代码以更好地使用处理器? 我有一个类,它在一个单独的线程中执行一些具有固定周期的任务。有时可以暂停和恢复此过程。目前我正在使用一个标志来暂停,它工作正常,但是当进程暂停时,以这种方式循环仍然加载处理器。有可能解决这个问题吗?
private boolean mIsCanceled = false;
private boolean mIsPaused = true; // TODO more efficient for processor way of pausing is required
private final Thread mTimerThread = new Thread(new Runnable() {
@Override
public void run() {
while(!mIsCanceled){
try {
Thread.sleep(UPDATE_PERIOD);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (!mIsPaused){
doStep();
}
}
}
});
public MyClass(){
mTimerThread.start();
}
private void pause(){
mIsPaused = true;
}
private void resume(){
mIsPaused = false;
}
private void doStep(){
// Some code
}
请提供我的代码的替代实现。
附:环境为Android OS 2.2+
【问题讨论】:
-
增加你的
UPDATE_PERIOD会减少CPU负载。 -
为什么说“当进程暂停时以这种方式循环仍然加载处理器”? Thread.sleep() 应该在给定时间内放弃执行,因此在此期间不要“加载处理器”。
-
1.增加您的 UPDATE_PERIOD 对我不起作用 2. 我希望我的任务等到课程暂停而不是检查标志并执行循环(即使我在循环中有睡眠)
标签: java android multithreading concurrency