У меня проблема с воспроизведением фоновой музыки в моем приложении (это игра), по какой-то причине происходит сбой приложения, если вы удаляете приложение из списка последних приложений Android, переключение на другое приложение работает нормально, другими словами, если я помещаю приложение в фоновом режиме, а затем возобновить, он работает, музыка останавливается и возобновляется (см. код ниже), но если я убиваю приложение, то происходит сбой
Насколько я знаю, это происходит только на Android 6, я тестировал на LG Nexus 5 и Samsung Galaxy S7, иногда приложение не падает, когда вы его убиваете, но происходит сбой, когда вы запускаете его после
Этого не происходит на Android 8
Init ()
String fileName = getAppHomePath() + "bgmusic.mp3";
try {
InputStream inputStream = Display.getInstance().getResourceAsStream(getClass(), "/bgmusic.mp3");
OutputStream outputStream = openFileOutputStream(fileName);
Util.copy(inputStream, outputStream);
backgroundMedia = MediaManager.createBackgroundMedia(fileName);
backgroundMedia.setVolume(50);
backgroundMedia.play();
} catch(IOException e) {
Log.e(e);
}
старт ()
if (backgroundMedia != null) {
if (!backgroundMedia.isPlaying()) backgroundMedia.play();
}
остановка ()
if (backgroundMedia != null) {
if (backgroundMedia.isPlaying()) backgroundMedia.pause();
}
уничтожить ()
if (backgroundMedia != null) {
backgroundMedia.cleanup();
}
изначально в destroy()
не было кода, я поместил его на всякий случай, когда он вызывается в тот момент, когда приложение убивается, но в любом случае происходит сбой
Я также получил (DDMS) журналы с устройства
11-15 14:51:42.431: E/ActivityThread(4952): Activity com.manyukhin.cerebrate.words.synonyms.WordsSynonymsStub has leaked ServiceConnection com.codename1.impl.android.e$3@df3ed35 that was originally bound here
11-15 14:51:42.431: E/ActivityThread(4952): android.app.ServiceConnectionLeaked: Activity com.manyukhin.cerebrate.words.synonyms.WordsSynonymsStub has leaked ServiceConnection com.codename1.impl.android.e$3@df3ed35 that was originally bound here
11-15 14:51:42.431: E/ActivityThread(4952): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:1092)
11-15 14:51:42.431: E/ActivityThread(4952): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:986)
11-15 14:51:42.431: E/ActivityThread(4952): at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1303)
11-15 14:51:42.431: E/ActivityThread(4952): at android.app.ContextImpl.bindService(ContextImpl.java:1286)
11-15 14:51:42.431: E/ActivityThread(4952): at android.content.ContextWrapper.bindService(ContextWrapper.java:604)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.impl.android.e.g(AndroidImplementation.java:3133)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.o.q.d(Display.java:4152)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.media.c.a(MediaManager.java:65)
11-15 14:51:42.431: E/ActivityThread(4952): at com.manyukhin.cerebrate.words.synonyms.v.a(Unknown Source)
11-15 14:51:42.431: E/ActivityThread(4952): at com.manyukhin.cerebrate.words.synonyms.WordsSynonymsStub.a(WordsSynonymsStub.java:133)
11-15 14:51:42.431: E/ActivityThread(4952): at com.manyukhin.cerebrate.words.synonyms.WordsSynonymsStub$1.run(WordsSynonymsStub.java:114)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.o.q.m(Display.java:1137)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.o.q.j(Display.java:932)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.o.ai.run(RunnableWrapper.java:120)
11-15 14:51:42.431: E/ActivityThread(4952): at com.codename1.impl.b$1.run(CodenameOneThread.java:60)
11-15 14:51:42.431: E/ActivityThread(4952): at java.lang.Thread.run(Thread.java:818)
11-15 14:51:42.548: E/PBSessionCacheImpl(3716): sessionId[16344683113135691] not persisted.
11-15 14:51:42.628: E/ACDB-LOADER(198): Error: ACDB AudProc vol returned = -19
11-15 14:51:43.635: E/AndroidRuntime(5154): FATAL EXCEPTION: main
11-15 14:51:43.635: E/AndroidRuntime(5154): Process: com.manyukhin.cerebrate.words.synonyms, PID: 5154
11-15 14:51:43.635: E/AndroidRuntime(5154): java.lang.RuntimeException: Unable to start service com.codename1.media.AudioService@134375 with null: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3027)
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.app.ActivityThread.-wrap17(ActivityThread.java)
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442)
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.os.Handler.dispatchMessage(Handler.java:102)
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.os.Looper.loop(Looper.java:148)
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.app.ActivityThread.main(ActivityThread.java:5417)
11-15 14:51:43.635: E/AndroidRuntime(5154): at java.lang.reflect.Method.invoke(Native Method)
11-15 14:51:43.635: E/AndroidRuntime(5154): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-15 14:51:43.635: E/AndroidRuntime(5154): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-15 14:51:43.635: E/AndroidRuntime(5154): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Bundle android.content.Intent.getExtras()' on a null object reference
11-15 14:51:43.635: E/AndroidRuntime(5154): at com.codename1.media.AudioService.onStartCommand(AudioService.java:59)
11-15 14:51:43.635: E/AndroidRuntime(5154): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3010)
11-15 14:51:43.635: E/AndroidRuntime(5154): ... 8 more
Как я понял createBackgroundMedia()
запускает Сервис, а затем не останавливает его, когда приложение убивается, есть ли обходной путь для этого?
EDIT
проблема подтверждена на Android 4.3, 5.0 и 6.0
Я изменил код на следующий:
начало ()
String fileName = getAppHomePath() + "bgmusic.mp3";
try {
InputStream inputStream = Display.getInstance().getResourceAsStream(getClass(), "/bgmusic.mp3");
OutputStream outputStream = openFileOutputStream(fileName);
Util.copy(inputStream, outputStream);
backgroundMedia = MediaManager.createBackgroundMedia(fileName);
backgroundMedia.setVolume(50);
backgroundMedia.play();
} catch(IOException e) {
Log.e(e);
}
остановка ()
if (backgroundMedia != null) {
backgroundMedia.cleanup();
}
Я думал, что это поможет, поскольку backgroundMedia.cleanup()
должен остановить воспроизведение и освободить все связанные ресурсы, включая фоновый сервис, но это не помогло, проблема все еще существует