Java 适合android的多任务处理
嗨,我正在开发一个android应用程序,我想知道我是如何让这个应用程序在后台使用更少的CPU的。例如,我的应用程序一旦失去焦点就会暂停,但cpu使用率仍为50% 编辑Java 适合android的多任务处理,java,android,Java,Android,嗨,我正在开发一个android应用程序,我想知道我是如何让这个应用程序在后台使用更少的CPU的。例如,我的应用程序一旦失去焦点就会暂停,但cpu使用率仍为50% 编辑 然后,当您暂停并恢复时,它只会更改暂停变量,您不应该在应用程序暂停时循环 有关android应用程序“正确”生命周期的更多详细信息,请参阅 还请注意,在任何繁忙的循环设计中,您的应用程序都将使用100%的CPU—我不确定从onResume()方法启动循环是否正确;我的直觉是让循环的每次迭代都由一个单独的调用来执行,该调用由对Ha
然后,当您暂停并恢复时,它只会更改暂停变量,您不应该在应用程序暂停时循环 有关android应用程序“正确”生命周期的更多详细信息,请参阅 还请注意,在任何繁忙的循环设计中,您的应用程序都将使用100%的CPU—我不确定从
onResume()
方法启动循环是否正确;我的直觉是让循环的每次迭代都由一个单独的调用来执行,该调用由对Handler.post()
的调用启动,最后一条语句重新发布下一个调用。否则,应用程序的主线程将被饿死,对吗
也许是这样的:
void iterate() {
Canvas c = null;
try {
c = sHolder.lockCanvas(null);
synchronized (sHolder) {
doDraw(c);
powerUps();
}
} finally {
if (c != null) {
sHolder.unlockCanvasAndPost(c);
}
}
this.handler.post(this.iterateRunnable);
}
void onResume() {
this.handler = new Handler();
this.iterateRunnable = new Runnable() {
@Override public void run() { iterate(); }
};
this.handler.post(this.iterateRunnable);
}
听起来你有一个繁忙的等待,它正在旋转和消耗cpu。我们能看到你暂停时正在做什么的代码吗?哦,然后在onPause()上,你只是删除处理程序的回调?实际上,等等,我的类使用了runnable,那么我如何使用run()实现它方法我的意思是
Runnable
而不是Runner
——我有没有提到我没有测试这个?是-this.handler.removeCallbacks(this.iterateRunnable)代码>应在onPause()
中完成。
void iterate() {
Canvas c = null;
try {
c = sHolder.lockCanvas(null);
synchronized (sHolder) {
doDraw(c);
powerUps();
}
} finally {
if (c != null) {
sHolder.unlockCanvasAndPost(c);
}
}
this.handler.post(this.iterateRunnable);
}
void onResume() {
this.handler = new Handler();
this.iterateRunnable = new Runnable() {
@Override public void run() { iterate(); }
};
this.handler.post(this.iterateRunnable);
}