Search code examples
javaandroidserviceconstructor

How to instantiate android service with a constructor?


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);

Solution

  • 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().