¿Cómo instanciar el servicio android con un constructor?

Tengo un servicio con un constructor siguiente:

public ShimmerService(Context context, Handler handler) { mHandler = handler; } 

Quiero instanciar esta clase de servicio. Tengo código siguiente pero, no estoy seguro donde pasar el paramater:

 private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder binder) { mShimmerService = ((ShimmerService.ShimmerConfigureBinder) binder) .getService(); Toast.makeText(ConfigureShimmer.this, "Shimmer service has succesfully started.", Toast.LENGTH_SHORT).show(); } public void onServiceDisconnected(ComponentName className) { mShimmerService = null; } }; 

Tengo todo lo demás configuración incluyendo vinculante, en el inicio y así sucesivamente. Pero consigo el error en código antedicho:

 04-03 19:06:10.285: E/AndroidRuntime(16837): java.lang.RuntimeException: Unable to instantiate service com.milanix.androidecg.services.ShimmerService: java.lang.InstantiationException: can't instantiate class com.milanix.androidecg.services.ShimmerService; no empty constructor 

¿Cómo soluciono este problema? ¿Dónde necesito pasar el parámetro? El siguiente código funciona, pero utiliza la clase de servicio como clase, en lugar de servicio:

 mShimmerService = new ShimmerService(this, mHandler); 

Usted no debe construir servicios (o actividades, o receptores de difusión) explícitamente. El sistema Android lo hace internamente. La forma correcta de construir un servicio es a través de startService() con una intención; No dude en agregar parámetros adicionales a esa intención.

El servicio extiende el contexto, por lo que realmente no lo necesita como un parámetro en su constructor, ya que puede utilizar esa misma instancia.

Si tiene otros parámetros que le gustaría pasar al servicio, recomendaría agregarlos a la opción startService como extras y obtenerlos en el método service.onStartCommand.

No pase el manejador al servicio, manipulador no implementa Parcelable, o Serializable, así que no pienso thats posible.

Cree el controlador en el servicio y pase los datos necesarios para crear el controlador a través de los extras de intención para el servicio.

Necesita tener un constructor sin argumentos para su clase de servicio, de lo contrario los sistemas no saben cómo instanciarlo.

En lugar de pasar Handler (o cualquier objeto) al servicio (lo que no es posible por cierto), crear y registrar BroadcastReceiver en su clase de actividad. Cuando necesite invocar funciones de Handler (o cualquier otra función en otro objeto), envíe la emisión en el receptor registrado (sendBroadcast). También puede agregar parámetros adicionales adicionales a la intención y puede manejar todo el código necesario directamente desde Actividad según parámetros.

Tal vez, en este caso, su manejador se eliminará completamente (Depende de lo que realmente necesita.). Con receptores de radiodifusión, no sé imaginar la situación en la que necesitaría pasar algún objeto al Servicio. Por otro lado, está haciendo algo que no es bueno y debe revisar el diseño de la aplicación.

Si queremos que algo pase al Servicio, sólo podemos iniciar el Servicio con parámetros adicionales en Intención. El servicio maneja el estado de acuerdo a estos parámetros dentro.

La idea es que el Servicio puede funcionar independientemente de otras partes de aplicaciones, por ejemplo, Actividades. Podemos controlarlo con parámetros adicionales cuando inicemos el Servicio o con el envío de emisiones para invocar código externo.

  • Android cómo enviar int y doble como namevaluepair como http post
  • Aplicación de Android que requiere archivos de datos grandes
  • StartForeground () no muestra mi notificación
  • Servicio Web SocketTimeOutException provoca inconsistencia de base de datos
  • No puedo conectarme a mi servicio web
  • Función "Battery saver" matando mi servicio de música
  • ¿Cómo acceder a un contexto de aplicación ya en ejecución desde un servicio de adaptador de sincronización en Android?
  • Retofit2 error java.io.EOFException: Fin de la entrada en la línea 1 columna 1
  • ¿Cómo determinar si un servicio de Android se está ejecutando en primer plano?
  • Excepción con servicio web (java.net.SocketException Permiso denegado) en Android
  • ¿Cómo puede una aplicación comunicarse con un servidor y reflejar las actualizaciones de inmediato?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.