multithreading - onBackPressed and threads in android -
i've got thread running in listactivity
and takes long data internet, maybe user wants quit , go back.
however, when press button, shows previous view, thread still remains in execution.
i override onbackpressed()
method , set breakpointm while debugging see doesn't go through it, don't know else do...
any idea?
thank you
here code. basically, don't know why doesn't execute onkeypressed()
if goes previous activity when y press button... code edit
// package + imports public class listavideosactivity extends listactivity implements runnable { private progressdialog pd; private context mcontext; private view header; private view footer; private vibrator vibrator; private boolean firstime = true; private thread thread; private long playlistid; private string playlisttitle; protected int headerdrawable; private playlist plist; public static final string tag_pl_id = "id_playlist"; public static final string tag_pl_title = "title_playlist"; public static final string tag_pl_header = "header_playlist"; private sensormanager msensormanager; private shakelistener mshakelistener; /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // context es el maintabactivity mcontext = getparent(); maintabactivity.tabhost.gettabwidget().setvisibility(view.gone); playlistid = getintent().getlongextra(tag_pl_id, 0l); playlisttitle = getintent().getstringextra(tag_pl_title); headerdrawable = getintent().getintextra(tag_pl_header, 0); setloadingview(); thread = new thread(this); thread.start(); createlistheader(); msensormanager = (sensormanager) getsystemservice(sensor_service); mshakelistener = new shakelistener(msensormanager); } @override protected void onpause() { msensormanager.unregisterlistener(mshakelistener); super.onpause(); } @override protected void onresume() { super.onresume(); msensormanager.registerlistener(mshakelistener, msensormanager .getdefaultsensor(sensor.type_accelerometer), sensormanager.sensor_delay_game); } private void setloadingview() { layoutinflater inflater = (layoutinflater) mcontext .getsystemservice(layout_inflater_service); view layout = inflater.inflate(r.layout.videos_loading_dialog, null); maintabactivity.tabhost.gettabwidget().setvisibility(view.gone); setcontentview(layout); } private void createlistheader() { layoutinflater inflater = (layoutinflater) mcontext .getsystemservice(layout_inflater_service); header = inflater.inflate(r.layout.videos_list_header, null); footer = inflater.inflate(r.layout.screen_footer, null); ((imageview) header).setimageresource(headerdrawable); } @override protected void onlistitemclick(listview l, view v, int position, long id) { video video = (video) l.getitematposition(position); intent intent = new intent(mcontext, bcplayeractivity.class); bcplayeractivity.video = video; mcontext.startactivity(intent); } public void run() { plist = bcvideogetter.getplaylistbyid(playlistid); if (plist != null) { // hay lista handler.sendemptymessage(1); } else { handler.sendemptymessage(0); } } private handler handler = new handler() { @override public void handlemessage(message msg) { switch (msg.what) { case 0: toast.maketext(mcontext, r.string.nohosterror, toast.length_long).show(); case 1: if (firstime) { // shake mshakelistener.setforcethreshhold(1.9); mshakelistener .setonshakelistener(new shakelistener.onshakelistener() { @override public void onshake() { if (pd == null || !pd.isshowing()) { vibrator.vibrate(300); updatevideoslist(); } } }); maintabactivity.tabhost.gettabwidget().setvisibility( view.visible); setcontentview(r.layout.videos_list); getlistview().addheaderview(header, null, false); getlistview().addfooterview(footer, null, false); setlistadapter(new videoslistadapter(mcontext, r.layout.videos_list_item, (arraylist) plist .getvideos())); vibrator = ((vibrator) getsystemservice(context.vibrator_service)); firstime = false; } else { ((videoslistadapter) getlistadapter()).setitems((arraylist) plist.getvideos()); ((videoslistadapter) getlistadapter()) .notifydatasetchanged(); } if (pd != null) pd.dismiss(); break; } } }; @override public void onbackpressed() { msensormanager.unregisterlistener(mshakelistener); thread.interrupt(); pestanaprogramastvactivity.group.back(); } public boolean oncreateoptionsmenu(menu menu) { menuinflater inflater = getmenuinflater(); inflater.inflate(r.menu.news_list_menu, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()) { case r.id.update: updatevideoslist(); break; case r.id.settings: intent settingsactivity = new intent(mcontext, settingsactivity.class); startactivity(settingsactivity); break; } return true; } private void updatevideoslist() { if (pd == null || !pd.isshowing()) { pd = progressdialog.show(mcontext, "", getresources().getstring( r.string.news_update), true); thread = new thread(this); thread.start(); } } }
thread.stop() deprecated method. can refer this document see how kill thread.
Comments
Post a Comment