» »

[Android] Ustavitev handlerja

[Android] Ustavitev handlerja

shadeX ::

pozdrav!

Imam kodo, ki jo s pomočjo handlerja lahko izvršim nekje v prihodnosti. Če pride do določenih okoliščin bi rad preprečil izvršitev te kode. Za to obstaja nekaj metod ki jih handler objekt ima.

Npr: handler.removeCallbacks(runnable), ali recimo handler.removeMessages(0).

Tukaj nastane malo zmeden problem. Preizkusil sem ti dve metodi v novem blank projektu na onCreate activitju z gumbom "start handler" in "stop handler". Če pritistnem start in nato stop, se handler ne bo izvedel..tako da definitivno sti te dve metodi eni izmed pravilnih ki ustavijo handler..

tukaj pa nastane težava. imam namreč 5 razredov. En razred je Broadcast (subclass Broadcast reciverju ). Tam imam handler kodo. Se pravi, onReceive (ki ga mimogrede pošilja service ), program naredi določene stvari. Če pride do kakšnih posebnih razmer zažene handler čez X časa. Koda vse deluje kot mora, vendar če želim prekiniti da se koda v handlerju ne izvrši (naprimer, uporabnik izplicitno ustavi program ) , se to ne zgodi. Koda čez X časa deluje naprej...

zakaj mi metode za ustavitev handlerja ne delujejo v broadcast reciverju, v main activitiju pa ja??

Mavrik ::

Hmm... brez kode povem točno karkoli konkretnega. Razen edino: Handler je vezan na trenuten Thread, a slučajno izvajaš kodo za preklic ali dodajanje sporočil na drugih threadih?
The truth is rarely pure and never simple.

shadeX ::

Na to sem tudi študiral ja. V dokumentaciji piše da je handler vezan na thread v kateremu prične z izvedbo.

Ma da bi vedel ne. Razen hm..
Če uporabnik pritisne tipko Menu ( koda je v main activitju ) in izberem Izhod, tam kličem moj Broadcast constructor ( brez argumentov ), ki nato kliče kodo za ustavitev handlerja.


Tukaj je koda razreda Broadcast ( Komentarje sem dodal in izbisal nepotrebno kodo, zaradi preglednosti )



// No argument constructor

public Broadcast() {
		
		if(handler != null) {
		cancelHandler();
		} else {
			
			Log.e("BROADCAST", "Handler NULL");
	
		}
	}


public void cancelHandler() {
		
		handler.removeCallbacks(run);
		Log.e("BROADCAST", "HANDLERSTOPPED");
	}



public void onReceive(Context context, Intent intent) {
		

	
		Log.e("ON RECEIVE", "On receive executed");
		// KODA KI SE IZVRŠI ON RECEIVE
		Log.e("From reciver", "userdefined var "+userDefined+" rssi from service "+rssiFromService);
		
		
		if(rssiFromService < userDefined  &&/*Value that user enters*/rssiFromService != -200) {
			
			
				/* If android version is highier or equal to API level 9 (gingerbread)*/
			if(android.os.Build.VERSION.SDK_INT >= 9) {
			
				// SPET KODA
			}  // end of IF statement
			
			// stop running service
			con.stopService(intentt);	
			
			
			
			//handler = new Handler();

			// start counting time ( userDef3Act ) - code executes only once ( depends on userdef3act variable for how long delay is)
			handler.postDelayed(run, userDef3gAct);
		
			
		} // end IF 

Runnable run = new Runnable() {
		
		@Override
		public void run() {
			
			threeG = false;
			
			con.startService(intentt);
			manage3g_OS2_3();
			wifiManager.setWifiEnabled(true);
			
			
			Log.e("HANDLER", "HANDLER IS RUNNING");
			
		}
	};


		
		
	}



To je pa v main activitiju koda za izhod iz programa

@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		
		switch(item.getItemId()) {
		
		case R.id.exitApp:
			checkHandler = false;
			new Broadcast();
			
			stopService(intentt);
			finish();
			return true;
			
			default: return super.onOptionsItemSelected(item);
		}
		
		
		
		
	}

shadeX ::

ok po 2 dneh zajebavanja sem rešil zadevo.

1. jaz noob sem šel na izhod delat nov objekt ( new Broadcast(); ). Logično da mi ni ustavilo handlerja ker je bil to drug handler in ne tisti ki bi kodo "pognal"

2. v main activitju sem naredil samo nov handler objekt ( tako da sem lahko isti objekt v main activitju ustavil ). sedaj deluje..


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Android] Thread

Oddelek: Programiranje
81204 (981) Spura
»

[Android] Informacija iz Servic-a v Main Activity

Oddelek: Programiranje
7970 (780) i386
»

[Java] "Uničenje" objekta ?

Oddelek: Programiranje
111219 (911) shadeX
»

[android] vstavljanje slike

Oddelek: Programiranje
71247 (1144) messi
»

[JAVA] zaustavitev niti (threadov)

Oddelek: Programiranje
223183 (3183) morbo

Več podobnih tem