我的應用程序僅在vivo手機中崩潰,錯誤日志是這樣的:java.lang.NullPointerException:嘗試在 android.media.PlayerBase.PlaybackDetectionCallBack(PlayerBase.java:348) 的空對象引用上調用虛擬方法“java.lang.String android.content.Context.getOpPackageName()”。 media.PlayerBase.baseStop(PlayerBase.java:229) 在 android.media.MediaPlayer$2.onCompletion(MediaPlayer.java:3578) 在 android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:3351) 在 android.os。 Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:192) 在 android.app.ActivityThread.main(ActivityThread.java:6671) 在 java.lang.reflect.Method.invoke (本機方法)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:818)我相信它是關于MediaPlayer我用來在我的應用程序中播放 BGM 的。但我不知道這是怎么發生的,因為錯誤堆棧沒有檢索到我的代碼。這是我關于播放 BGM 的所有代碼。public void playBgm(final int resId, boolean restartIfSame) { if(resId == currentBgmRes && !restartIfSame) { if(!bgmPlayer.isPlaying()) { bgmPlayer.start(); } return; } if(bgmPlayer.isPlaying()) { bgmPlayer.stop(); } _playBgm(resId);}private void _playBgm(int resId) { bgmPlayer.release(); bgmPlayer = MediaPlayer.create(this, resId); bgmPlayer.setLooping(true); currentBgmRes = resId; bgmPlayer.start();}這兩個函數在里面class AppDelegate extends Application,所以this應該是應用程序實例。它并不總是崩潰。由于導致問題的電話是一些遙遠的用戶,我幾天都無法拿到電話。所以我不確定它會在什么情況下發生,但它不應該在任何情況下發生。
1 回答

慕碼人8056858
TA貢獻1803條經驗 獲得超6個贊
我解決了這個問題。
我的MediaPlayer
變量有一個初始值new MediaPlayer()
。
當Activity
播放BGM來電onPause()
時,我打電話MediaPlayer.pause()
。
但是調用pause()
anew MediaPlayer()
似乎會在某些設備中導致崩潰,而在其他設備中則可以。
我將初始值更改為null
,并在使用該對象時進行空檢查。崩潰再也不會發生了。
添加回答
舉報
0/150
提交
取消