Мое приложение аварийно завершает работу только в телефонах vivo, и журнал ошибок выглядит так:
java.lang.NullPointerException: попытка вызвать виртуальный метод
'java.lang.String android.content.Context.getOpPackageName ()' на
ссылка на нулевой объект в
android.media.PlayerBase.PlaybackDetectionCallBack (PlayerBase.java:348)
на android.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.
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
должен быть экземпляром приложения.
Это не всегда дает сбой. Так как телефон, вызывающий проблему, - какой-то далекий пользователь, я не могу получить телефон через несколько дней. Поэтому я не уверен, в какой ситуации это произойдет, но это не должно происходить ни в одной ситуации.