Service startet nicht


#1

Hallo,

ich möchte direkt beim Programmstart einen Service starten,
aber der will einfach nicht starten.
Im Manifest habe ich ihn eingetragen.
[XML][/XML]
Der Aufruf sieht so aus:

		Intent startObserveUnitIntent = new Intent(context, ObserveUnit.class); 
		Bundle extras = new Bundle();
		extras.putInt("unitOfTime", FREQUENCE_TO_OBSERVE_UNIT); // TAKTUNG = 200
		startObserveUnitIntent.putExtra("values", extras); 
		context.startService(startObserveUnitIntent);```

Und hier die ObserveUnit.class:
```public class ObserveUnit extends Service {

	private static final String TAG = "ObserveUnit";
	public static final String ACTION_BROADCAST = "com.nh.fup.service.OBSERVE_UNIT";
	private ObserveUnitBinder mBinder = new ObserveUnitBinder();	
	private Timer mTimer;
	
	public class ObserveUnitBinder extends Binder {
		public ObserveUnitBinder(){
			Log.i(TAG, "1. ObserveUnitBinder");
		}
	}
	
	@Override
	public void onCreate() {
		Log.i(TAG, "2. onCreate");
		super.onCreate();
		mTimer = new Timer();
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		Log.i(TAG, "3. onStartCommand " + flags + ", " + startId);
		mTimer.schedule(mTimerTask, 0);
		return super.onStartCommand(intent, flags, startId);		
	}
	
	private TimerTask mTimerTask = new TimerTask() {		
		@Override
		public void run() {	
			Log.i(TAG, "run"); // WIRD NICHT ANGEZEIGT !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			final Intent broadcastIntent = new Intent(ACTION_BROADCAST);
			getApplicationContext().sendBroadcast(broadcastIntent);
		}
	};
	
	@Override
	public IBinder onBind(Intent intent) {
		return mBinder;
	}
	@Override
	public void onDestroy() {
		super.onDestroy();
		mTimer.cancel();
	}
}```
In dieser Klasse (s.o) werden ObserveUnitBinder(), onCreate() und onStartCommand() aufgerufen,
aber nie die Methode run(), die ja schlussendlich den Call sendet.

Entsprechend kann ich in der onReceive()-Methode nichts entgegennehmen.

Ich habe den Eindruck, dass ich irgendwo eine Kleinigkeit nicht sehe.
[B]Warum wird run() nicht aufgerufen?[/B]
                                                                                  :ka:

#2

Es scheint so, dass du nicht der erste bist, der diese Probleme mit TimeTask hat. Man findet so einiges bei Google.

Hier ein evtl. hilfreicher Blog: http://www.mopri.de/2010/timertask-bad-do-it-the-android-way-use-a-handler/


#3

Danke deedee!

Ich verwende neben dem oben beschriebenen noch drei andere Services in meiner App. Diese funktionieren einwandfrei. Natürlich habe ich den Quellcode miteinander verglichen und habe auch dabei nicht herausfinden können, warum der eine nicht funktioniert.
Ich werde jetzt mal auf die Suche / Testen gehen, ob es daran liegt, dass ich den vierten Service gleich nach dem Start aufrufe.

*** Edit ***

Jawohl, ich kann das Thema abhaken.
Ich habe den Aufruf des Service in meinem App-Startprozeß ganz nach hinten geschoben und jetzt funktiert es.
geändert habe ich übrigens noch innerhalb der Methode onStartCommand die Zeile unitOfTime = intent.getBundleExtra("values").getInt("unitOfTime"); mTimer.schedule(mTimerTask, 0, unitOfTime);, damit der Service sofort (0) und dann kontinuierlich (unitOfTime) ruft.

Danke! allen, die mitgedacht haben.
Und “Bitte!” für alle, die auf das selbe Problem stoßen! :wink: