java - On back, kill activity without delaying main thread -


i'm running simple application on load shows list of items, when clicked opens video player playing media.

i'm having issue when destroying player , returning list view, there long delay before events being registered. due tear down of player taking few seconds.

i had asked support crew , recommended best way go hide player , show again when new media clicked i've been reading threads , seems might best approach use instead? i'm not sure how work though. if kill player service in ondestroy initiating new 1 still held up?

public class demoplayer extends activity {      private player player;     private seekbarscrubber scrubber;       @override     public void oncreate(bundle savedinstancestate)     {         super.oncreate(savedinstancestate);         setcontentview(r.layout.player);         // set media url holder         string mediaurl = "";          player = new player(                 // inject player container view adk player                 (viewgroup) this.findviewbyid(r.id.tpplayer)         );          // build application ui         scrubber = (seekbarscrubber) findviewbyid(r.id.scrubber);         scrubber.setmediaplayercontrol(player.asmediaplayercontrol());          final activity activity = this;          try {             uri mediauri = new uri(mediaurl);             player.playreleaseurl(mediauri);         } catch (urisyntaxexception e) {             alertdialog alertdialog = new alertdialog.builder(activity).create();             alertdialog.settitle("invalid url");             alertdialog.setmessage("issue loading media");             alertdialog.setcancelable(true);             alertdialog.show();         }     }       @override     protected void ondestroy() {         new thread(new runnable() {             public void run() {                 if (player != null)                    player.getlifecycle().destroy();                player = null;            }         }).start();         viewgroup viewgroup = (viewgroup) this.findviewbyid(r.id.tpplayer);         viewgroup.removeview(scrubber);         scrubber = null;         super.ondestroy();     }      @override     public boolean onkeydown(int keycode, keyevent event) {         if (keycode == keyevent.keycode_back) {             finish();// call finish() on click of button         }         return super.onkeydown(keycode, event);     }  } 

tl;dr: how kill player without holding ui thread since takes few seconds destroy player. loading new player cause issues?

currently error below

failed access media controller because player thread shutdown skipped 374 frames!  application may doing work on main thread. 

the player attached view when view created not other way around. therefore think best option move player singleton , start/stop him regardless of activity lifecycle. of course u can shutdown on thread (i suggest u read threadpools , executers because see thread.start() on android.

also:

viewgroup viewgroup = (viewgroup) this.findviewbyid(r.id.tpplayer); viewgroup.removeview(scrubber); scrubber = null;

this unnecessary.


Comments

Popular posts from this blog

javascript - Bootstrap Popover: iOS Safari strange behaviour -

Magento/PHP - Get phones on all members in a customer group -

session - Logging Out Using PHP -