¿Por qué Android necesita pasar datos a través de intentos? ¿Por qué no se puede acceder a los datos en todas las actividades?

Bueno, puedes hacer esas cosas. Los paquetes son solo argumentos de constructor genéricos. Dicho esto, debes tener en cuenta el ciclo de vida del sistema Android. A diferencia de las aplicaciones Java normales, Android funciona utilizando el concepto de “Contexto”; una representación de la situación actual de la aplicación. Cada actividad es un contexto diferente y, como objeto, contiene referencias a otros objetos, y viceversa; si solo hacemos que cada variable sea global (a través del modificador estático, o pasando referencias), entonces no se recolectará ninguna ventana, desperdiciando efectivamente toda la memoria del dispositivo, porque la memoria de la aplicación se liberaría solo si los usuarios cierran la aplicación, y mucho tiempo, no lo hacen.

Ahora, eso no significa que tenga que vivir según el sistema de intención y pasar todo a través de paquetes. Puede desacoplar los datos de las actividades, creando almacenamientos de memoria (colecciones estáticas, objetos únicos a los que se accede mediante un método estático, etc.), almacenamientos sólidos (archivos SQLite, Firebase, Json, archivos de preferencias); use un enfoque de actividad única, cambiando la interfaz de usuario usando fragmentos o vistas personalizadas (puede agregar un constructor java regular a esos, aunque en el caso de fragmentos, el sistema está fuertemente orientado de otra manera), etc.

Esto es parte de la administración de memoria y la protección de sandbox del sistema operativo Android. Si quisieran permitirte hacer esto, lo harían absolutamente, pero es mucho más seguro no permitir que dos actividades hablen directamente entre sí, deben entregar la comunicación (la intención) al SO y dejar que el SO maneje el mensaje que pasa. Esto es para que no pueda hacer que una aplicación defectuosa o defectuosa ingrese al espacio de memoria de otra aplicación y altere o robe datos en esa aplicación. En su lugar, debe realizar llamadas de sistema operativo muy específicas y darle al sistema operativo una estructura de objetos muy bien definida y la actividad de recepción debe tener un código especial para recibir y manejar la comunicación. En realidad, es una herramienta muy poderosa y mantiene el sistema muy seguro, incluso si a veces es un dolor en el trasero.

Es posible utilizar variables estáticas como una forma de recuperar datos en una actividad de otras actividades. Diría que una desventaja a la que esto puede conducir si no se usa probablemente es una pérdida de memoria, lo que significaría que el recolector de basura no podrá hacer su trabajo ya que la actividad que se supone que debe eliminar todavía se está haciendo referencia (usando la variable estática de otro activiry). Esta es mi opinión.