Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 适合android的多任务处理_Java_Android - Fatal编程技术网

Java 适合android的多任务处理

Java 适合android的多任务处理,java,android,Java,Android,嗨,我正在开发一个android应用程序,我想知道我是如何让这个应用程序在后台使用更少的CPU的。例如,我的应用程序一旦失去焦点就会暂停,但cpu使用率仍为50% 编辑 然后,当您暂停并恢复时,它只会更改暂停变量,您不应该在应用程序暂停时循环 有关android应用程序“正确”生命周期的更多详细信息,请参阅 还请注意,在任何繁忙的循环设计中,您的应用程序都将使用100%的CPU—我不确定从onResume()方法启动循环是否正确;我的直觉是让循环的每次迭代都由一个单独的调用来执行,该调用由对Ha

嗨,我正在开发一个android应用程序,我想知道我是如何让这个应用程序在后台使用更少的CPU的。例如,我的应用程序一旦失去焦点就会暂停,但cpu使用率仍为50%

编辑


然后,当您暂停并恢复时,它只会更改暂停变量,您不应该在应用程序暂停时循环

有关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);
}