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:
- ¿Cuál es el fragmento equivalente de Activity.isFinishing ()?
- Android: ejecuta el código onResume y onPause para todas las actividades de la aplicación?
- Cambiar el fondo de la actividad del código
- ¿Cómo programar tematicamente una actividad para ser como un diálogo?
- Inicie la aplicación de Android con actividad específica
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?
- Cómo iniciar aplicaciones Android en mi aplicación en Android?
- El fragmento no se reanuda con su actividad después de usar el intercambio de intenciones
- No hay animación para Android al pasar de una actividad de retrato a una actividad de paisaje
- ¿Cómo puedo configurar la actividad del Lanzador mediante programación en android?
- Android: Duplicación de fragmentos al utilizar el Administrador de fragmentos de soporte
- ¿Cómo mostrar una actividad como pop-up en otra actividad?
- El botón de retroceso de Android no funciona
- ¿Cómo puedo mostrar un diálogo sobre la actividad actualmente visible en android?
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.
- HttpClient de Android que envía la petición a la máquina de anfitrión sobre USB
- ¿La intención de Android de publicar la URL?