Java 如何从非ui线程(从曲面视图绘图线程)启动活动

Java 如何从非ui线程(从曲面视图绘图线程)启动活动,java,android,android-activity,thread-safety,Java,Android,Android Activity,Thread Safety,我正在开发一款android游戏,它使用一个表面视图来表示ui图形。我需要实现一种方法,如果用户接触到特定区域,则启动另一个活动。 为此,我将主(前景)活动的当前实例传递给曲面视图 我可以轻松处理触摸,但无法从收到的实例启动活动 **>如果我从接收到的 发生当前活动异常,表明它是来自非 用户界面线程** 我正在使用一个扩展到surface view的类,并将其传递给在画布上绘制的线程SurfaceView是否在活动中? 如果是,请使用 runOnUiThread(new Runnable() {

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

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

**>如果我从接收到的

发生当前活动异常,表明它是来自非 用户界面线程**


我正在使用一个扩展到surface view的类,并将其传递给在画布上绘制的线程

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

runOnUiThread(new Runnable() {
  public void run() {
    //startActivity
  }
});
如果你不在活动范围内,你真的不应该开始其他活动

SurfaceView还有一个post和postDelayed方法,可用于在UI线程上发布可运行文件

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

   });

我想你可以做到这一点

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


           // start your activity here


                    }
                });
您可以使用:

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

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

在我的应用程序中,一个表面视图的对象在活动中被实例化,然后该对象被传递给活动的setContentView()方法。我认为如果它不是直接在活动中,那么它不应该启动其他活动。。它应该将其委托给使用它的活动。我将实现一些接口来响应来自surfaceview的一些事件(回调函数)。不过,我还需要看更多的代码才能帮到你。谢谢,伙计们,我找到了答案,我从类实例中调用了rununui,它工作得非常好