LibVLC: ANR after repeated stopping MediaPlayer instances
Using libvlc, create a MediaPlayer, assign media (and start it), then stop the media player. Rinse and repeat relatively quickly and you're likely to run into an ANR.
Thread dumps in /data/anr/traces.txt
show that mediaPlayer.stop()
is the (beginning of the) culprit:
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 obj=0x7572e138 self=0xb4864500
| sysTid=9233 nice=0 cgrp=apps sched=0/0 handle=0xb6feeb3c
| state=S schedstat=( 8218952490 6919261633 26456 ) utm=647 stm=174 core=3 HZ=100
| stack=0xbe777000-0xbe779000 stackSize=8MB
| held mutexes=
native: #00 pc 00017694 /system/lib/libc.so (syscall+28)
native: #01 pc 004606a7 /data/app/com.foo-2/lib/arm/libvlc.so (???)
at org.videolan.libvlc.MediaPlayer.nativeStop(Native method)
at org.videolan.libvlc.MediaPlayer.stop(MediaPlayer.java:465)
at com.foo.service.playback.vlc.VLCMediaPlayerHelper$MediaPlayerWrapper.stop(VLCMediaPlayerHelper.java:137)
at com.foo.service.playback.media.MediaPlayerHelper.stop(MediaPlayerHelper.java:179)
- locked <0x07e7e703> (a com.foo.service.playback.vlc.VLCMediaPlayerHelper)
at com.foo.service.playback.media.MediaPlayerView.killMediaPlayer(MediaPlayerView.java:101)
at com.foo.service.playback.media.MediaPlayerView.recreateMediaPlayer(MediaPlayerView.java:79)
at com.foo.service.playback.media.MediaPlayerView.loadUrlSource(MediaPlayerView.java:223)
at com.foo.service.playback.TracksControllerHelper.lambda$loadOnlineVideoTrack$33(TracksControllerHelper.java:342)
at com.foo.service.playback.TracksControllerHelper.access$lambda$5(TracksControllerHelper.java:-1)
at com.foo.service.playback.TracksControllerHelper$$Lambda$7.call(unavailable:-1)
at rx.internal.util.ActionSubscriber.onNext(ActionSubscriber.java:39)
at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:139)
at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.call(OperatorObserveOn.java:215)
at rx.android.schedulers.LooperScheduler$ScheduledAction.run(LooperScheduler.java:107)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke!(Native method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)