Android lifecycle duda

R

Hola a todos.

Gracias de antemano.

En general suelo encontrar las soluciones en internet, pero en este caso no soy capaz.

Tengo código que tengo que ejecutar en el hilo principal de la app cuando se lance el metodo onRestart(). El problema es que al sobreescribir el onRestart(), el código no se ejecuta en el hilo principal, si no en un thread aparte (eso he leido) por lo que mi código no se ejecuta correctamente.

Si pongo el código en un Button funciona perfectamente, pero quiero ejecutarlo automáticamente en el hilo principal tras lanzarse el onRestart() de la activity. ¿Alguna sugerencia?

Muchas gracias.

zoeshadow

Tienes un metodo que se llama runOnUiThread() en la clase activity que te puede ayudar.

Y si no... https://developer.android.com/training/multiple-threads/communicate-ui.html

2 respuestas
R

#2 Voy a probarlo y te cuento.

Muchas gracias.

R

#2 Sigue sin funcionar. Es bastante raro.

Así si funciona "a()"

[code]Button a = (Button) findViewById(R.id.buttonOFF);
	a.setOnClickListener(new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			a();
		}
	});[/code]

Así no:

	@Override
	protected void onRestart() {
		
	super.onRestart();
	
	runOnUiThread(new Runnable() {
		
		@Override
		public void run() {
			a();
			
		}
	});
}

EDITO: He encontrado una solución un tanto "cutre" pero funciona a la perfección. Muchas gracias por la ayuda.

zoeshadow

Igual es que todavía no están creadas las vistas a las que quieres acceder, no podrías pasarlo al metodo onResume()?

mira este gráfico http://developer.android.com/training/basics/activity-lifecycle/stopping.html

1 respuesta
R

#5 Creo que lo probé ayer, pero voy a hacer otro intento. Gracias.

EDIT: Nada sigue igual, te agradezco mucho la ayuda, pero voy a desistir por hoy. Un saludo.

Tig

¿Por qué usas onRestart()? Sólo se llama cuando vuelves de onStop. De todas formas, que onRestart no se ejecuta en el hilo principal, déjame dudarlo. Quizá esto te sirva

http://android-er.blogspot.com.es/2014/05/complete-android-fragment-activity.html

Si explicas lo que quieres hacer quizá te podamos ayudar.

1 respuesta
Drhaegar

Sin saber más o menos lo que hace a() poco te vamos a poder ayudar.

1 respuesta
R

#7 y #8 Tenéis toda la razón.

os dejo el método a():

private void a() {
ActivityManager am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
		am.killBackgroundProcesses("com.coolm.packageimp");
}

Usuarios habituales