你能解释一下线程是如何工作的吗?实际上它现在工作得很好,但我想要掌握逻辑。我认为它让我有机会同时进行2次计算,所以我不必等待第一次计算。但是怎么用呢?在哪里进行第一次计算以及在何处进行第二次计算?在C ++中,我必须在分割时获取进程ID,然后我必须使用if if if(pID == 1){// first calculation}
我的课程是: 我有 ClassA 这是主要活动 ClassB :使用扩展为 SurfaceView 的竞争视图 和 ClassC :使用游戏循环扩展到线程
这里他们是: 的 ClassA的:
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));
}
}
ClassB的:
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.
}
}
ClassC:
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);
}
}
}
}
}
答案 0 :(得分:2)
你是否在询问android中的线程如何工作?
在C ++中,我假设你使用Threads作为并行处理工具,将重复工作的负载分成多个处理器。
在Android中,除非您使用多核设备和特定框架(如Tegra平台),否则这种线程处理实际上是浪费时间。在Android中,最好使用线程来执行您不希望在逻辑线程或UI线程上执行的任务。
在你的情况下,我假设你正在使用android构建游戏,我建议使用两个线程:逻辑线程和UI线程。让这些异步运行,你的游戏应该顺利运行。
抱歉,我无法提供帮助,因为我不确定您的问题是什么。
有关Android中线程的更多信息,请访问Android Developers
答案 1 :(得分:0)
在classC中你不需要调用onDraw,它通过主要活动调用(如果没有,你做错了什么)。在主活动中启动逻辑线程。所以你得到两个线程 - 绘制和逻辑。 如果您在ClassC中调用onDraw,那么编写ClassZ扩展Thread,这将计算一些逻辑时刻。 在C中你这样做,以了解你在哪个线程。在Java中 - 一个Thread.run在分叉线程中做一个工作。