如何从非ui线程(从表面视图绘制线程)开始活动

时间:2012-03-10 07:19:39

标签: java android android-activity thread-safety

我正在开发一款使用表面视图来表示ui图形的安卓游戏。如果用户触摸特定区域,我需要实现一个方法来启动另一个活动。 为此我将主(前景)活动的当前实例传递给表面视图

我可以轻松处理触摸,但无法从收到的实例启动活动。

**指如果我从

的接收实例中调用startActivity方法
  

当前活动发生异常,表明它是来自非的呼叫   UI线程**

我正在使用扩展到表面视图的类并将其传递给绘制其画布的线程

3 个答案:

答案 0 :(得分:3)

SurfaceView是否在活动中? 如果是这样,请使用

runOnUiThread(new Runnable() {
  public void run() {
    //startActivity
  }
});

如果你不在活动中,你真的不应该开始其他活动..

SurfaceView还有一个post和postDelayed方法,可用于在UI线程上发布Runnables。

  post(new Runnable() {
       public void run() {
         //startActivity
       }

   });

答案 1 :(得分:1)

我认为你可以这样做......

 runOnUiThread(new Runnable() {
                     public void run() {


           // start your activity here


                    }
                });

答案 2 :(得分:1)

您可以使用:

// from MySurfaceView/Activity
Context context = getContext(); 

//EffectingActivity is another activity
Intent intent = new Intent(context, EffectingActivity.class); 
context.startActivity(intent);