如何在Android中线程?
我正在开发我的第一个游戏,它运行良好,但显然需要一些优化。最初,我让一切都在一个线程上运行(我使用LunarLander API开始游戏)。从那时起,我在游戏中添加了两个新的线程。它仍然工作得很好,但我看不出有什么改进。我一定是做错了什么 这是基本设置:如何在Android中线程?,android,multithreading,Android,Multithreading,我正在开发我的第一个游戏,它运行良好,但显然需要一些优化。最初,我让一切都在一个线程上运行(我使用LunarLander API开始游戏)。从那时起,我在游戏中添加了两个新的线程。它仍然工作得很好,但我看不出有什么改进。我一定是做错了什么 这是基本设置: class GameView extends SurfaceView implements SurfaceHolder.Callback { private Mover mover; private Collider colli
class GameView extends SurfaceView implements SurfaceHolder.Callback {
private Mover mover;
private Collider collider;
private GameThread thread;
class Mover extends Thread{
//methods
}
class Collider extends Thread{
//methods
}
class GameThread extends Thread{
//methods
}
public GameView(Context context, AttributeSet attrs) {
mover = new Mover();
collider = new Collider();
thread = new GameThread();
thread.start();
}
}
然后,在GameThread类中,我在需要时调用其他线程上的方法:
collider.checkCollision();
这是减少主线程负载的正确方法吗?好吧,在他们推出双核手机之前,多线程在性能改进方面不会给你带来任何好处
当您在其他线程上执行I/O密集型操作时,多线程可以提供帮助(因为它们会将大部分时间都花在I/O上,从而允许主线程继续处理)。但是当你有了CPU密集型的东西,比如碰撞检测,那么你只需要让两个线程争夺一个CPU核心。好吧,在他们推出双核手机之前,多线程不会为你带来任何性能提升
当您在其他线程上执行I/O密集型操作时,多线程可以提供帮助(因为它们会将大部分时间都花在I/O上,从而允许主线程继续处理)。但是,当你遇到了CPU密集型的事情,比如碰撞检测,那么你只需要让两个线程争夺一个CPU核心。除了其他人已经指出的以外,我还想提到一些其他概念,这些概念在你进行多线程处理时应该牢记在心:
除了其他人已经指出的内容外,我还想提及一些其他概念,这些概念通常在进行多线程处理时应该牢记在心:
即使你有两个CPU,让碰撞检测依赖于其他线程是确保只有一个CPU得到有效使用的一种可靠方法。@Arafangion:是的,好的,你的线程都需要尽可能地解耦,以最大限度地提高并行性。所以我听说我实际上什么都没做,我应该研究其他优化android脚本的方法,比如Lirik在下面指出的方法?@Snailer,如果你开始使用多线程,我提到的想法会对你有所帮助,但正如其他人所指出的,在你的情况下,没有必要运行多线程,因为它不会提高性能。即使你有两个CPU,让碰撞检测依赖于其他线程是确保只有一个CPU得到有效使用的可靠方法。@Arafangion:是的,很好的一点,为了最大化并行性,您的线程都需要尽可能地解耦。所以我听说我实际上什么都没做,我还应该研究其他优化android脚本的方法,比如Lirik在下面指出的方法?@Snailer,如果你开始使用多线程,我提到的想法将对你有所帮助,但正如其他人所指出的那样——在你的情况下,你不需要运行多线程,因为它不会提高性能。