[Android] 'Cannot resolve symbol...' en Threads

Buenas!

Estoy empezando con threads en Android, y cada vez que intento llamar a un método del Thread desde ApplicationMain, el IDE se queja y me lanza error de

Cannot resolve symbol... (y el nombre de cualquier método del thread)

Os pongo el código lo más simplificado posible, a ver si es que me he equivocado anidando clases o métodos, o qué hago mal.

package com.example.bla.blabla;

import android.app.Activity;


public class MainActivity extends Activity {


   //variables aquí
    private static Button StartStop;
   
      @Override
      protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
      }
      
      
      //Objeto Runnable
      Runnable runnable = new Runnable() {     
               
         private Object mPauseLock;
         private boolean mPaused;
         private boolean mFinished;


         Thread t;

         public void updateValue() {
            mPauseLock = new Object();
            mPaused = false;
            mFinished = false;
         }


         public void run() {

            while (!mFinished) {
               //hago cosas
         }
       

         public void onPause() {
            synchronized (mPauseLock) {
               mPaused = true;
            }
         }

         public void onResume() {
            synchronized (mPauseLock) {
               mPaused = false;
               mPauseLock.notifyAll();
            }
         }

      };
   
   
      //Thread    
      Thread mythread = new Thread(runnable);
      mythread.start();
      
         
      

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // lo típico
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // lo típico
    }
   

    private class AddNewRecord extends AsyncTask<String, Void, Void> {

       //más cosas
    }
}





En este caso el fallo me lo da

mythread.start();


cannot resolve symbol 'start'. Si intento llamar a cualquier otro método, el resultado es el mismo.

¿Alguien ve qué pasa?

Gracias!
Por lo que veo hay varios errores importantes.

onPause y onResume no pueden ir dentro del Runnable y el código que crea el hilo está fuera de una función, cosa que no es posible.
Gracias Waninkoko.

Cómo creo el hilo entonces? Que yo sepa no puedo salirme de la clase ApplicationMain...

Gracias!

EDIT: Perdón, ApplicationMain es una clase, no una función. ¿Funcionará si lo creo dentro de "void onCreate()"?
banderas20 escribió:Gracias Waninkoko.

Cómo creo el hilo entonces? Que yo sepa no puedo salirme de la clase ApplicationMain...

Gracias!

EDIT: Perdón, ApplicationMain es una clase, no una función. ¿Funcionará si lo creo dentro de "void onCreate()"?
Eso de que no puedes salirte...

Define la variable fuera, pero instanciala dentro de un método (new Runnable...) y para lanzar el hilo igual, dentro de un método.
nazareth escribió:Define la variable fuera, pero instanciala dentro de un método (new Runnable...) y para lanzar el hilo igual, dentro de un método.


A ver si me aclaro:

1. Codifico una clase nueva (clase1) que implemente runnable y dentro del run() meto lo que quiero que haga.
2. Tengo que crear un Thread pasándole como argumento una instancia de clase1
3. Tengo que llamar al método start() del Thread.

El punto 1 está claro (creo). La cuestión es, ¿en qué punto del código MainActivity.java hago los puntos 2 y 3? ¿En onCreate(), o dónde?

Para mí el onCreate() es el equivalenre al clásico void Main() de C. El punto de entrada a la aplicación.

Por favor, una ayudita.

Gracias!
El thread lo creas donde te haga falta, si es en onCreate, pues ahí. Si es un thread del cual no requieres un control nada mas que para pararlo, puedes incluso no guardar una referencia a él, usas un booleano para parar el thread y listo, tal y como tienes hecho.

Pequeño ejemplo, ojea el punto 3 (3. Code): http://examples.javacodegeeks.com/andro ... d-example/

Para crear el thread puedes implementar Runnable o extender Thread. Si quieres tener el control del thread dentro, tendras que crearte una variable "Thread t" y en el constructor hacer "t = this;".

El problema de los threads es en el tema de actualizar la interfaz, por eso se opta por usar asynctask, o pasarte la una referencia al thread de la actividad principal.
5 respuestas