¿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:
- Consumir servicio REST Web y analizar datos XML en Android
- ¿Cómo llamar a un servicio web .NET desde android?
- La solicitud de servicio web no funciona en el navegador android android; Pero está trabajando en el navegador de PC
- ¿Cómo maneja un servidor las solicitudes de servicio web de varios clientes?
- Servicio de fondo de Android para determinar la aplicación de primer plano
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);
- Conexión a un servicio web desde android - AsyncTask o Service?
- Cómo mostrar texto marathi en Android procedente de webservice
- START_STICKY, el servicio Android de primer plano desaparece sin previo aviso
- ¿Cómo utilizar webservices en android?
- Se esperaba BEGIN_OBJECT pero era BEGIN_ARRAY en la línea 1 columna 2 (edición pequeña)
- La llamada de Webservice desde el dispositivo Android no funciona, funciona bien en el emulador
- Phonegap Android Internet no funciona
- Android: No se puede instanciar el servicio ... no se puede instanciar la clase com.stocktickerwidget.AppWidget $ UpdateService; sin constructor vacío
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.
- La selección de proyectos en configuraciones de ejecución en Eclipse está vacía
- El método onHandleIntent () no se llama