微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android MediaPlayer NullPointerException

我有点难以对此进行故障排除,因为我是通过其他人的 Android设备的崩溃报告得到的,我无法向他们提问,而且我从未在自己的Android设备上看到它.

崩溃报告说它是Android 4.1.2,堆栈跟踪是:

java.lang.NullPointerException
at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2102)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5021)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
at dalvik.system.NativeStart.main(Native Method)

不幸的是,grepcode.com上的android源代码似乎与这些行号不匹配,所以我不确定哪个是null.

当发生这种情况时,我不知道用户正在做什么,所以我不知道这是在音乐或声音效果正在播放时发生,还是在发生破坏时发生了什么.我有点怀疑它可能在毁灭期间发生.我在activity的onDestroy方法中有以下代码

public void onDestroy() {
    synchronized(curPlayers) {
        for(List<MediaP> ms : curPlayers.values()) {
            synchronized(ms) {
                for(MediaP m : ms) {
                    synchronized(m) {
                        m.m.stop();
                        m.m.release();
                    }
                }
            }
        }
        curPlayers.clear();
    }
}

private static class MediaP {
    private MediaP(MediaPlayer m) {
        this.m = m;
    }

    private MediaPlayer m;
    private boolean wasplaying = false;
}

那里有什么我应该做的吗?

解决方法

在release()之前删除对MediaPlayer.stop()的调用.我们在Nexus 4,5,7,10和Moto X上看到过很多类似的崩溃.你可以在这里阅读更多内容 NullPointerException in MediaPlayer$EventHandler.handleMessage

据我所知,有一次他们切换到从stop()发送消息,如果你不够运气,你的release()会在检查到它不为空并尝试调用方法后立即使对象无效.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐