Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
Fixes a leak caused by AudioManager using an Activity context, see https://github.com/square/leakcanary/issues/205
public class ActivityUsingVideoView extends Activity {
@Override protected void attachBaseContext(Context base) {
super.attachBaseContext(AudioServiceActivityLeak.preventLeakOf(base));
}
}
/**
* Fixes a leak caused by AudioManager using an Activity context.
* Tracked at https://android-review.googlesource.com/#/c/140481/1 and
* https://github.com/square/leakcanary/issues/205
*/
public class AudioServiceActivityLeak extends ContextWrapper {
AudioServiceActivityLeak(Context base) {
super(base);
}
public static ContextWrapper preventLeakOf(Context base) {
return new AudioServiceActivityLeak(base);
}
@Override public Object getSystemService(String name) {
if (Context.AUDIO_SERVICE.equals(name)) {
return getApplicationContext().getSystemService(name);
}
return super.getSystemService(name);
}
}

This is truly helpful. Thank you.

it works! thank you man.

Great! Thank you Sir!

This made my day! Awesome Work!

Awesome. Thanks!!

I use above attachBaseContext & AudioServiceActivityLeak for my video player (extend VideoView) plays 25 of small video files with duration between 15 seconds and 32 seconds in a media box with Android 4.4.2 forever, the MediaPlayer of Android 4.4.2 crashes after 14 hours, I did two times for this testing, I got same result.
If I do not use attachBaseContext & AudioServiceActivityLeak for my video player, then my video player stops to play these 25 of video files after 27 hours (not crash)
can anyone help me explain why ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment