» »

[Android] končanje threada

[Android] končanje threada

icurk ::

Imam meni in ko kliknem na določen gumb mi odpre en activity kateri mi z novim threadom iz internetne strani pobere določene podatke in jih izpišem v listview, to pa spremlja tudi progressDialog. Sedaj pa me zanima, kako bi lahko jaz ta thread prekinil, z back tipko, da bi se vrnil na meni? Spodaj lahko vidite tudi osnutek kode.
protected void onCreate(Bundle savedInstanceState) {
		progDialog = ProgressDialog.show(this, "Nalaganje", "Prosimo počakajte trenutek...", true);
		Thread thread = new Thread(this);
		thread.start();	
	}
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		list.clear();
	}
	public void run() {
		//Tukaj gremo na spletno stran in povlečemo ter shranimo podatke
                //.
                //.
			threadHandler.sendEmptyMessage(0);
			progDialog.dismiss();
		
	}

	private Handler threadHandler = new Handler() {
		public void handleMessage(android.os.Message msg) {			
			setListAdapter(adapter);
		}
	};

AaBoy ::

Zakaj bi hotel sploh prekiniti, ker če bi rad, da ti gre nazaj na prejšnji activity, ko pridobiš podatke, je boljše narediti v asinhronem taski, pa daš v onPostExecute klic prejšnjega activitya ali pa kličeš metodo onBackPress?

icurk ::

Jaz bi rad prekinil thread med samim izvajanjem in ne po koncu. Torej če naprimer uporabnik noče čakati da se podatki naložijo (recimo da je po pomoti pritisnil tipko), da lahko to nalaganje prekine. A je mogoče v main threadu kako z onkey eventom to narediti? Nekaj sem že iskal po spletu, vendar nisem našel ustrezne rešitve.

Marat ::

a tebe moti predvsem ta progress dialog? Kaj pa če v onBackPressed() metodo dodaš progDialog.dismiss()? Se lahko potem vrneš v prejšnji activity?

icurk ::

Če bi tako naredil, bi se thread še vedno izvajal, samo tega progDialoga nebi blo. Tako da bi, če bi hotel priti nazaj v meni, mogel dvakrat kliknit back button.

Marat ::

A si pogledal tole dokumentacijo: http://developer.android.com/reference/.... Verjetno bi zadostoval kak interrupt() (ostalo kot npr stop() je že deprecated). Daj probaj pa povej če dela ;)

Mavrik ::

Interrupt ne dela čist tako preprosto kot bi on želel (uporabljati mora katerega od InterruptibleChannelov in paziti na flag).

Dejstvo je: dejansko na večini operacijskih sistemov in jezikov ni zanesljivega načina kako ustaviti thread (zato so tudi v večini že "deprecated" ali pa zraven piše "USE ONLY IF YOU KNOW WHAT HAPPENS!!!!!").

icurk-ova dilema se reši preprosto z enim flagom (npr. boolean stop), katerega gleda koda v Threadu in prekine izvajanje če je postavljen.
The truth is rarely pure and never simple.


Vredno ogleda ...

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

[Android] setText iz AsyncTask

Oddelek: Programiranje
7788 (705) golobich
»

[android] java.lang.RuntimeException

Oddelek: Programiranje
141007 (699) piki12
»

android črta

Oddelek: Programiranje
412273 (1544) g333kk
»

[android] vstavljanje slike

Oddelek: Programiranje
71147 (1044) messi
»

[android] crash

Oddelek: Programiranje
61265 (1074) messi

Več podobnih tem