Merge pull request #1763 from mfietz/issue/1762-audioplayer-leak

Audioplayer: Prevent leak
This commit is contained in:
Martin Fietz 2016-03-16 20:55:19 +01:00
commit dd61b065b4
4 changed files with 42 additions and 7 deletions

View File

@ -103,6 +103,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop()");
pagerAdapter.setController(null);
if(subscription != null) {
subscription.unsubscribe();
}
@ -112,9 +113,13 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy()");
super.onDestroy();
// don't risk creating memory leaks
drawerLayout = null;
navAdapter = null;
navList = null;
navDrawer = null;
drawerToggle = null;
pager = null;
pagerAdapter = null;
@ -171,6 +176,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
if(pagerAdapter != null && controller != null && controller.getMedia() != media) {
media = controller.getMedia();
pagerAdapter.onMediaChanged(media);
pagerAdapter.setController(controller);
}
EventDistributor.getInstance().register(contentUpdate);
@ -258,7 +264,8 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
});
pager = (ViewPager) findViewById(R.id.pager);
pagerAdapter = new AudioplayerPagerAdapter(getSupportFragmentManager());
pagerAdapter = new AudioplayerPagerAdapter(getSupportFragmentManager(), media);
pagerAdapter.setController(controller);
pager.setAdapter(pagerAdapter);
CirclePageIndicator pageIndicator = (CirclePageIndicator) findViewById(R.id.page_indicator);
pageIndicator.setViewPager(pager);
@ -537,10 +544,16 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
void onMediaChanged(Playable media);
}
private class AudioplayerPagerAdapter extends FragmentStatePagerAdapter {
private static class AudioplayerPagerAdapter extends FragmentStatePagerAdapter {
public AudioplayerPagerAdapter(FragmentManager fm) {
private static final String TAG = "AudioplayerPagerAdapter";
private Playable media;
private PlaybackController controller;
public AudioplayerPagerAdapter(FragmentManager fm, Playable media) {
super(fm);
this.media = media;
}
private CoverFragment coverFragment;
@ -548,6 +561,7 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
private ChaptersFragment chaptersFragment;
public void onMediaChanged(Playable media) {
this.media = media;
if(coverFragment != null) {
coverFragment.onMediaChanged(media);
}
@ -559,6 +573,13 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
}
}
public void setController(PlaybackController controller) {
this.controller = controller;
if(chaptersFragment != null) {
chaptersFragment.setController(controller);
}
}
@Nullable
public ChaptersFragment getChaptersFragment() {
return chaptersFragment;
@ -580,7 +601,8 @@ public class AudioplayerActivity extends MediaplayerActivity implements NavDrawe
return itemDescriptionFragment;
case POS_CHAPTERS:
if(chaptersFragment == null) {
chaptersFragment = ChaptersFragment.newInstance(media, controller);
chaptersFragment = ChaptersFragment.newInstance(media);
chaptersFragment.setController(controller);
}
return chaptersFragment;
default:

View File

@ -260,6 +260,7 @@ public abstract class MediaplayerActivity extends AppCompatActivity implements O
Log.d(TAG, "onStop()");
if (controller != null) {
controller.release();
controller = null; // prevent leak
}
}

View File

@ -2,6 +2,7 @@ package de.danoeh.antennapod.fragment;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
@ -15,15 +16,16 @@ import de.danoeh.antennapod.core.util.playback.PlaybackController;
public class ChaptersFragment extends ListFragment implements AudioplayerContentFragment {
private static final String TAG = "ChaptersFragment";
private Playable media;
private PlaybackController controller;
private ChaptersListAdapter adapter;
public static ChaptersFragment newInstance(Playable media, PlaybackController controller) {
public static ChaptersFragment newInstance(Playable media) {
ChaptersFragment f = new ChaptersFragment();
f.media = media;
f.controller = controller;
return f;
}
@ -37,6 +39,10 @@ public class ChaptersFragment extends ListFragment implements AudioplayerContent
lv.setPadding(0, vertPadding, 0, vertPadding);
adapter = new ChaptersListAdapter(getActivity(), 0, pos -> {
if(controller == null) {
Log.d(TAG, "controller is null");
return;
}
Chapter chapter = (Chapter) getListAdapter().getItem(pos);
controller.seekToChapter(chapter);
});
@ -58,6 +64,7 @@ public class ChaptersFragment extends ListFragment implements AudioplayerContent
public void onDestroy() {
super.onDestroy();
adapter = null;
controller = null;
}
@Override
@ -74,4 +81,9 @@ public class ChaptersFragment extends ListFragment implements AudioplayerContent
setEmptyText(null);
}
}
public void setController(PlaybackController controller) {
this.controller = controller;
}
}

View File

@ -111,7 +111,7 @@ public class ItemDescriptionFragment extends Fragment implements AudioplayerCont
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "Creating view");
webvDescription = new WebView(getActivity());
webvDescription = new WebView(getActivity().getApplicationContext());
if (Build.VERSION.SDK_INT >= 11) {
webvDescription.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}