android caching dependency-injection kotlin dagger-2

android - El objeto Singleton se vuelve nulo después de que se reanuda la aplicación



caching dependency-injection (1)

Se producen bloqueos porque inicializa esas variables en una Actividad y espera que se establezca siempre en la otra Actividad.

Pero Android no funciona así, puede terminar fallando fácilmente porque después de que ocurre una condición de poca memoria, solo se recrea la Actividad actual al principio, se recrea la Actividad anterior en la navegación hacia atrás y se anulan todas las variables estáticas (porque el proceso se reinicia técnicamente).

Pruébelo: coloque su aplicación en segundo plano con el botón INICIO, haga clic en el botón TERMINAR en Android Studio, luego vuelva a iniciar la aplicación desde el iniciador. Experimentarás este fenómeno.

Solución: compruebe si hay valores nulos y reinicie las cosas en una actividad base (o en LiveData.onActive).

Para mi proyecto de Android, necesito un objeto de caché singleton global para acceder a los datos sobre un usuario a través de la aplicación.

Se produce un problema cuando una aplicación pasa a segundo plano y después de un tiempo de usar otras aplicaciones, trato de abrir las variables de la aplicación en los objetos de caché son nulas. Todo está bien cuando elimino la aplicación y la abro nuevamente. Estoy usando la inyección de dependencia para acceder al objeto Cache. ¿Por qué la aplicación no comienza de nuevo si eso sucedió? ¿Hay alguna anotación para mantener la variable de caché incluso en condiciones de poca memoria?

Esta es mi clase de caché

class Cache { var categories : Array<BaseResponse.Category>? = null var user : BaseResponse.User? = null var options : BaseResponse.OptionsMap? = null var order: MenuOrderDataModel? = null }

Este es el módulo de almacenamiento para DI

@Module class StorageModule { @Singleton @Provides fun getSharedPrefs(context: Context): SharedPreferences { return PreferenceManager.getDefaultSharedPreferences(context) } @Singleton @Provides fun getCache() : Cache = Cache() }

@Inject lateinit var cache: Cache objeto @Inject lateinit var cache: Cache y luego lo @Inject lateinit var cache: Cache con los datos del usuario en la pantalla de @Inject lateinit var cache: Cache .

Editar: fragmentos de código agregados de la aplicación y la actividad de inicio

class MyApp : Application() { val component: ApplicationComponent by lazy { DaggerApplicationComponent .builder() .appModule(AppModule(this)) .build() } companion object { @JvmStatic lateinit var myapp: MyApp } override fun onCreate() { super.onCreate() myapp= this Fabric.with(this, Crashlytics()) } }

Actividad de bienvenida:

class SplashActivity : AppCompatActivity(), View.OnClickListener { @Inject lateinit var viewModel : ISplashViewModel private lateinit var disposable : Disposable override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) MyApp.myapp.component.inject(this) }