¿Debe lógica de inicialización (digamos para singletons numerosos) estar en OnCreate o OnResume?

Digamos que tengo singletons con inilizaciones mehods para un LocationController genérico, BatteryController, AppSateController, etc …

¿Deben estar en OnResume en contraposición a OnCreate ya que OnCreate se llama en cada rotación, cada vez que cambia a foregroud, etc …?

Mi recomendación es generalmente para implementar singletons como lo haría normalmente directamente. Ignora Android, y simplemente haz el tipo normal de cosas como esto:

class Singleton { static Singleton sInstance; static Singleton getInstance() { // NOTE, not thread safe! Use a lock if // this will be called from outside the main thread. if (sInstance == null) { sInstance = new Singleton(); } return sInstance; } } 

Ahora llame a Singleton.getInstance () en el momento en que lo necesite. Su singleton será instanciado en ese punto, y seguirá siendo reutilizado por el tiempo que su proceso existe. Este es un buen enfoque, ya que permite que sus singletons ser perezosamente asignados (sólo como se necesitan), en lugar de hacer un montón de trabajo inicial para las cosas que no puede necesitar de inmediato que hace que su lanzamiento (y, por tanto, la capacidad de respuesta a la Usuario) a sufrir. También ayuda a mantener su código más limpio, todo sobre su singleton y su gestión se encuentra en su propio lugar, y no depende de algún lugar global en su aplicación que se ejecuta para inicializarlo.

También si necesita un Contexto en su singleton:

 class Singleton { private final Context mContext; static Singleton sInstance; static Singleton getInstance(Context context) { // NOTE, not thread safe! Use a lock if // this will be called from outside the main thread. if (sInstance == null) { sInstance = new Singleton(context); } return sInstance; } private Singleton(Context context) { // Be sure to use the application context, since this // object will remain around for the lifetime of the // application process. mContext = context.getApplicationContext(); } } 

Si necesita inicializar singletons (supongo que singlelet de nivel de aplicación), entonces la forma apropiada podría ser extender la aplicación y proporcionar la inicialización necesaria en su método onCreate () . Sin embargo, si la inicialización es pesada, puede ser una buena idea colocarla en un subproceso independiente, que se inicia desde la clase Aplicación.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.