I have a service with an following constructor:
public ShimmerService(Context context, Handler handler) {
mHandler = handler;
}
I want to instantiate this service class. I have following code but, I am not sure where to pass the 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;
}
};
I have everything else setup including binding, on start and so on. But I get error in above code:
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
How do I fix this problem? Where will i need to pass parameter? Following code works but, it rather uses service class as a class, rather than service:
mShimmerService = new ShimmerService(this, mHandler);
You should not construct services (or activities, or broadcast receivers) explicitly. The Android system does that internally. The proper way to construct a service is via startService()
with an intent; feel free to add extra parameters to that intent.
EDIT: or bindService()
. Then you have options - either build a custom interface with AIDL, or use raw transact()
.