Iniciar nueva actividad de Android es tan lento

Quiero abrir una nueva Actividad:

Intent intent = new Intent(homeScreen.this, EmployeeService.class); Bundle b = new Bundle(); b.putInt(Constants.SERVICE_DETAIL_L1_ID_MSG, ServiceIndex.SRV_L1_EMPLOYMENT); b.putInt(Constants.SERVICE_DETAIL_FOCUS_POS_MSG, 2); intent.putExtras(b); startActivity(intent); 

Pero tarda tanto en hacer visible la actividad de destino (EmployeeService). Desde Logcat, veo:

 05-14 23:43:31.727: INFO/ActivityManager(59): Displayed activity fr.playsoft.happylille/.employee.EmployeeService: 7050 ms (total 7050 ms) 

No puedo creer que tome más de 7 segundos sólo para abrir una nueva Actividad. Añado un registro onCreate () pero veo solamente tomar 5ms para terminar onCreate.

¿Puede alguien decirme cómo encontrar la raíz de este problema?

Debe mover el código Html.fromHtml(desc); A un hilo para tenerlo asíncrono. Este hilo se puede iniciar con seguridad durante el onCreate() de la actividad recién abierta.

Al final de ese hilo, puede ejecutar tvDesc.setText() desde el subproceso de UI:

 class ExampleThread extends Thread { @Override public void run() { final Spanned spannedText = Html.fromHtml(desc); yourNewlyOpenedActivity.runOnUiThread(new Runnable() { @Override public void run() { tvDesc.setText(spannedText); } }); } } 

Más en general, 7 segundos en un dispositivo puede significar 20 en otro, así que ten cuidado con el ANR !

(Editado más adelante al comentario de Boy abajo, la versión anterior de esta respuesta ya no era exacta / válida)

La respuesta de Shlublu es incorrecta, no se le permite hacer actualizaciones de interfaz de usuario de los subprocesos no UI!

Parece que funciona al principio, pero eso es sólo suerte, tiempo.

Sólo una prueba rápida fea prueba que va a salir mal en el momento "correcto". Aquí se establece un texto cada 100 ms. Se bloqueará en aproximadamente 1 segundo:

  new Thread() { @Override public void run() { while (true) { someTextView.setText("bla"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); 

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. este error: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Creo que debe ejecutar el Html.fromHtml(desc) través de un AsyncTask o RxJava

Su código de actividad abierto nuevo puesto en el hilo. Y ejecutar código puede ser menos tiempo para requerir abrir otra actividad .. puede ser útil.

  • Utilizar intent.getStringExtra dentro de una actividad
  • ACTION_SENDTO no funciona
  • Actividad de cierre de Android mediante programación
  • ¿Comenzar demasiadas actividades?
  • Iniciar una actividad desde preferences.xml
  • Envío de la actividad al fondo sin terminar
  • ¿Cómo crear un diseño de barra de herramientas doblado?
  • ¿Cómo probar el código construido para salvar / restaurar el ciclo de vida de una actividad?
  • Actividad inicial de Android-Library-Project
  • Java.lang.IllegalStateException: Fragmento no adjunto a la actividad
  • A qué error se refiere esto: "new_window_surface devuelve 0x3000"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.