java - 线程在android中是如何工作的

标签 java android multithreading

你能解释一下线程是如何工作的吗?实际上它现在工作得很好,但我想了解背后的逻辑。我认为它让我有机会同时进行 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/

相关文章:

java - 实现接口(interface)的方法是否在java中被覆盖

java - 打印 Joda-时间间隔

android - 插件不支持该项目的 cordova-android 版本。 cordova-android : 4. 1.1,失败的版本要求 : >=5. 0.0-dev

android - 如何在 android 中解决此错误 "com.android.internal.telephony cannot be resolved to a type"

c# - 锁和互斥锁有什么区别?

java - 使用 Play! 进行域对象验证框架

android - 是否可以在运行时从代码更改资源

android - 发布到 UI 线程

Java - 内存分配困难(GC_FOR_ALLOC)

java - 无法识别 HttpTransport 类型的 create RequestFactory() 方法