从线程类开始另一个活动

时间:2013-02-20 14:44:39

标签: android multithreading

这是我第一次创建Android游戏。游戏通过SurfaceView运行。

这是SurfaceView

public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
    private GameThread game_thread;

    public GameView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        SurfaceHolder sh = getHolder();
        sh.addCallback(this);
        setFocusable(true);

        game_thread = new GameThread(sh, context, new Handler());
    }

    public void surfaceCreated(SurfaceHolder holder)
    {
        game_thread.start();
    }

    public void surfaceDestroyed(SurfaceHolder holder)
    {
        game_thread.stop();
    }
}

运行游戏的线程是这样的。

public class GameThread extends Thread
{
    public GameThread(SurfaceHolder sh_arg, Context c, Handler h)
    {
        sh = sh_arg;
        context = c;
    }

    @Overide
    public void run()
    {
        super.run();
        while(!dead)
        {
            // Update here
        }
        // Game Over. Start another activity from here to show player score.
    }
}

到目前为止,我设法让它开始另一个活动的唯一方法是在循环之后添加它。

context.startActivity(new Intent(context, GameOver.class));

活动确实开始并显示但冻结并导致ANR。

我猜测从一个线程开始一个活动并不是一个好主意,并且有更好的替代方法。

2 个答案:

答案 0 :(得分:0)

当您实例化并启动线程时,您可以从主线程(也就是UI线程)执行此操作。有了它,你有一个UI线程和一个后台线程。现在,当你想从第二个线程启动另一个UI线程(通过启动另一个活动)时,因为你已经有了另一个带有UI线程的Activity,你就会遇到问题。您不能同时运行两个活动。

答案 1 :(得分:0)

尝试使用

    ((Activity)context).runOnUiThread(new Runnable(){

    public void run()
    {
    context.startActivity(new Intent(context, GameOver.class));
    } 
    });