Mam usługa z następującym konstruktora:Jak utworzyć instancję usługi Android za pomocą konstruktora?
public ShimmerService(Context context, Handler handler) {
mHandler = handler;
}
chcę instancję tej klasy usług. Mam następujący kod, ale nie jestem pewien, gdzie przekazać 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;
}
};
mam wszystko setup tym wiążące, na początku i tak dalej. Ale pojawia się błąd w powyższym kodzie:
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
Jak naprawić ten problem? Gdzie będę musiał podać parametr? Następujące prace kodu, ale to raczej wykorzystuje klasę usług jako klasa, zamiast służby:
mShimmerService = new ShimmerService(this, mHandler);
ale, w jaki sposób mogę przekazać handler używając i intent? jakieś przykłady? – Milan
Do czego potrzebny jest ten program obsługi? Czy na pewno skonstruowanie handler'a od zera w serwisie nie pomoże? Usługi nie są wątkami; usługa jest wykonywana w tym samym wątku UI, co kod konsumenta. –
Nie wiem, czy istnieje różnica między "bindService" i "startService" w tym zakresie, ale zgodnie z dokumentacją i [tą dyskusją] (https://groups.google.com/d/topic/android-developers/onqqpHz2WQw/discussion) dodatki nie mogą tam być, gdy intencja zostanie odebrana w 'onBind'. – DuneCat