aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Jackson <daneren2005@gmail.com>2013-04-02 07:33:26 -0700
committerScott Jackson <daneren2005@gmail.com>2013-04-02 07:33:26 -0700
commitecdb65172e07745ea702f62e0e400239dce34138 (patch)
tree401d2f7c9c1dac694dbeb3ba02ca8c9932e61927
parentd5b34ed5ce1579176daa4a30851e2ef5c95dd8c9 (diff)
downloaddsub-ecdb65172e07745ea702f62e0e400239dce34138.tar.gz
dsub-ecdb65172e07745ea702f62e0e400239dce34138.tar.bz2
dsub-ecdb65172e07745ea702f62e0e400239dce34138.zip
Run mediaPlayer in non-UI Looper
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java55
1 files changed, 35 insertions, 20 deletions
diff --git a/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java b/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
index 4a32bf1f..8890a5c7 100644
--- a/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
+++ b/subsonic-android/src/github/daneren2005/dsub/service/DownloadServiceImpl.java
@@ -58,6 +58,7 @@ import android.media.MediaPlayer;
import android.os.Build;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.PowerManager;
import android.util.Log;
import github.daneren2005.dsub.activity.SubsonicTabActivity;
@@ -85,6 +86,8 @@ public class DownloadServiceImpl extends Service implements DownloadService {
private RemoteControlClientHelper mRemoteControl;
private final IBinder binder = new SimpleServiceBinder<DownloadService>(this);
+ private Looper mediaPlayerLooper;
+ private Handler mediaPlayerHandler;
private MediaPlayer mediaPlayer;
private MediaPlayer nextMediaPlayer;
private boolean nextSetup = false;
@@ -137,27 +140,37 @@ public class DownloadServiceImpl extends Service implements DownloadService {
public void onCreate() {
super.onCreate();
- mediaPlayer = new MediaPlayer();
- mediaPlayer.setWakeMode(this, PowerManager.PARTIAL_WAKE_LOCK);
+ new Thread(new Runnable() {
+ public void run() {
+ Looper.prepare();
+
+ mediaPlayer = new MediaPlayer();
+ mediaPlayer.setWakeMode(DownloadServiceImpl.this, PowerManager.PARTIAL_WAKE_LOCK);
+
+ mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+ @Override
+ public boolean onError(MediaPlayer mediaPlayer, int what, int more) {
+ handleError(new Exception("MediaPlayer error: " + what + " (" + more + ")"));
+ return false;
+ }
+ });
- mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
- @Override
- public boolean onError(MediaPlayer mediaPlayer, int what, int more) {
- handleError(new Exception("MediaPlayer error: " + what + " (" + more + ")"));
- return false;
- }
- });
-
- nextMediaPlayer = new MediaPlayer();
- nextMediaPlayer.setWakeMode(this, PowerManager.PARTIAL_WAKE_LOCK);
-
- nextMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
- @Override
- public boolean onError(MediaPlayer mediaPlayer, int what, int more) {
- handleErrorNext(new Exception("MediaPlayer error: " + what + " (" + more + ")"));
- return false;
- }
- });
+ nextMediaPlayer = new MediaPlayer();
+ nextMediaPlayer.setWakeMode(DownloadServiceImpl.this, PowerManager.PARTIAL_WAKE_LOCK);
+
+ nextMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+ @Override
+ public boolean onError(MediaPlayer mediaPlayer, int what, int more) {
+ handleErrorNext(new Exception("MediaPlayer error: " + what + " (" + more + ")"));
+ return false;
+ }
+ });
+
+ mediaPlayerLooper = Looper.myLooper();
+ mediaPlayerHandler = new Handler(mediaPlayerLooper);
+ Looper.loop();
+ }
+ }).start();
Util.registerMediaButtonEventReceiver(this);
@@ -210,6 +223,7 @@ public class DownloadServiceImpl extends Service implements DownloadService {
if(nextMediaPlayer != null) {
nextMediaPlayer.release();
}
+ mediaPlayerLooper.quit();
shufflePlayBuffer.shutdown();
if (equalizerController != null) {
equalizerController.release();
@@ -871,6 +885,7 @@ public class DownloadServiceImpl extends Service implements DownloadService {
Thread.sleep(200L);
}
catch(Exception e) {
+ Log.w(TAG, "Crashed getting current position", e);
isRunning = false;
positionCache = null;
}