Forum » Programiranje » [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.
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 ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Android] setText iz AsyncTaskOddelek: Programiranje | 839 (756) | golobich |
» | [android] java.lang.RuntimeExceptionOddelek: Programiranje | 1070 (762) | piki12 |
» | android črtaOddelek: Programiranje | 2389 (1660) | g333kk |
» | [android] vstavljanje slikeOddelek: Programiranje | 1232 (1129) | messi |
» | [android] crashOddelek: Programiranje | 1329 (1138) | messi |