Fix crash bug

fongmi
FongMi 2 weeks ago
parent 16d347a935
commit 36a6766541
  1. 5
      app/src/main/java/com/fongmi/android/tv/player/PlayerManager.java
  2. 20
      app/src/main/java/com/fongmi/android/tv/server/process/Media.java
  3. 1
      app/src/main/java/com/fongmi/android/tv/service/PlaybackService.java

@ -60,7 +60,6 @@ public class PlayerManager implements ParseCallback {
}
public void release() {
stopParse();
App.removeCallbacks(runnable);
if (engine == null) return;
player.removeListener(listener);
@ -93,6 +92,10 @@ public class PlayerManager implements ParseCallback {
return player.isPlaying();
}
public boolean isReleased() {
return player == null;
}
public String getUrl() {
return spec != null ? spec.getUrl() : null;
}

@ -15,9 +15,7 @@ import com.fongmi.android.tv.service.PlaybackService;
import com.google.gson.JsonObject;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.CompletableFuture;
import fi.iki.elonen.NanoHTTPD.IHTTPSession;
import fi.iki.elonen.NanoHTTPD.Response;
@ -33,21 +31,17 @@ public class Media implements Process {
public Response doResponse(IHTTPSession session, String url, Map<String, String> files) {
PlaybackService service = Server.get().getService();
if (service == null) return Nano.ok("{}");
AtomicReference<JsonObject> result = new AtomicReference<>();
CountDownLatch latch = new CountDownLatch(1);
App.post(() -> {
result.set(build(service.player()));
latch.countDown();
});
CompletableFuture<String> future = new CompletableFuture<>();
App.post(() -> future.complete(build(service.player()).toString()));
try {
if (latch.await(500, TimeUnit.MILLISECONDS)) return Nano.ok(result.get().toString());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
return Nano.ok(future.get());
} catch (Exception ignored) {
return Nano.ok("{}");
}
return Nano.ok("{}");
}
private JsonObject build(PlayerManager player) {
if (player.isReleased()) return new JsonObject();
MediaItem item = player.getCurrentMediaItem();
MediaMetadata meta = item != null ? item.mediaMetadata : MediaMetadata.EMPTY;
JsonObject result = new JsonObject();

@ -161,6 +161,7 @@ public class PlaybackService extends MediaLibraryService implements MediaLibrary
public void onDestroy() {
running = false;
releaseSession();
player.stop();
player.release();
removeForeground();
Server.get().setService(null);

Loading…
Cancel
Save