你能解释一下线程是如何工作的吗?实际上它现在工作得很好,但我想了解背后的逻辑。我认为它让我有机会同时进行 2 次计算,这样我就不必等待第一次计算了。但是如何使用呢?第一次计算放在哪里,第二次计算放在哪里?在 C++ 中,我必须在拆分时获取进程 ID,然后我必须使用类似 if(pID==1){//first calculation}
我的类(class)是: 我有一个 ClassA 这是主要 Activity ClassB:用作扩展到 SurfaceView 的竞争 View 和一个 ClassC:用作扩展到 Thread
的游戏循环他们在这里: A 类:
public class ClassA extends Activity{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(new ClassB(this));
}
}
B 类:
public class ClassB extends SurfaceView{
//Variables.......................
private ClassC GameLoop;
//Constructor.....................
public GameView(final Context context) {
super(context);
GameLoop = new ClassC(this);
Holder=getHolder();
Holder.addCallback(new SurfaceHolder.Callback() {
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
public void surfaceChanged(SurfaceHolder/// blaa bla
// TODO Auto-generated method stub
}
});
this.setOnTouchListener(new OnTouchListener()
{
//@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
}
});
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.GREEN);
//Using canvas and drawing something on it.
}
}
C 类:
public class ClassC extends Thread {//GameLoop
private ClassB view;
private boolean running = false;
public ClassC(ClassB view) {
this.view = view;
}
public void setRunning(boolean run) {
running = true;
}
@Override
public void run() {
while (running) {
Canvas c;
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);// Here I call onDraw to draw everything
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
}
}
}
最佳答案
您是在问线程在 Android 中一般是如何工作的?
在 C++ 中,我假设您使用线程作为并行处理工具,将重复性工作的负载分摊到多个处理器上。
在Android中,除非你使用的是多核设备和像Tegra平台这样的特定框架,否则这种线程处理实际上是在浪费时间。在 Android 中,最好使用线程来执行您不想冒险在逻辑线程或 UI 线程上执行的任务。
在您的情况下,我假设您正在使用 android 构建游戏,我建议使用两个线程:一个逻辑线程和一个 UI 线程。让这些异步运行,你的游戏应该运行流畅。
抱歉,我不能提供更多帮助,因为我不确定您的问题到底是什么。
有关 android 中线程的更多信息,请参见此处 Android Developers
关于java - 线程在android中是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904411/