Cómo iniciar una actividad desde un hilo que no sea de interfaz de usuario (desde un hilo de dibujo de vista de superficie)

Estoy desarrollando un juego para Android que usa una vista de superficie para representar los gráficos de la interfaz de usuario. Necesito implementar un método para iniciar otra actividad si el usuario toca un área específica. para esto estoy pasando la instancia actual de la actividad principal (en primer plano) a la vista de superficie

Puedo manejar el toque fácilmente pero no puedo iniciar la actividad desde la instancia recibida.

**> si llamo al método startActivity desde la instancia recibida del

actividad actual Se producen excepciones que indican que es una llamada desde un subproceso que no es ui**

estoy usando una clase extendida a la vista de superficie y pasada a un hilo que dibuja en su lienzo

preguntado el 10 de marzo de 12 a las 07:03

GRACIAS COMPAÑEROS LO DESCUBRE Llamé a runOnUI desde la instancia de la clase y funciona perfectamente -

3 Respuestas

¿Está SurfaceView dentro de una actividad? Si es así, utilice

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

Si no estás dentro de una actividad, realmente no deberías estar iniciando otras actividades.

Además, SurfaceView tiene métodos post y postDelayed que se pueden usar para publicar Runnables en el subproceso de la interfaz de usuario.

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

   });

respondido 10 mar '12, 07:03

bueno, en mi aplicación, se crea una instancia de un objeto de vista de superficie en la actividad y luego el objeto se pasa al método setContentView () de la actividad: allahjane

Yo diría entonces que si no está directamente en una actividad, no debería iniciar otras actividades. Debería delegar eso a la actividad que lo usa. Implementaría alguna interfaz que responda a algún evento (función de devolución de llamada) desde la vista de superficie. Sin embargo, tendría que ver más de tu código para ayudarte con eso. - Matt Wolfe

Creo que puedes hacer esto...

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


           // start your activity here


                    }
                });

respondido 10 mar '12, 07:03

Puedes usar:

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

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

Respondido el 26 de Septiembre de 12 a las 11:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.