From 0b0ea77df1bde38bf211c68e54be45541080e2c7 Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Sat, 21 Sep 2013 12:11:06 +0200 Subject: [PATCH] Fixed crashes in FeedItemlist --- .../activity/FeedItemlistActivity.java | 22 ++++++++++++++++++- .../antennapod/fragment/ItemlistFragment.java | 9 +++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java b/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java index 98695429c..981379f6a 100644 --- a/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java +++ b/src/de/danoeh/antennapod/activity/FeedItemlistActivity.java @@ -49,6 +49,8 @@ public class FeedItemlistActivity extends ActionBarActivity { private ItemlistFragment filf; private ExternalPlayerFragment externalPlayerFragment; + private AsyncTask currentLoadTask; + @Override public void onCreate(Bundle savedInstanceState) { setTheme(UserPreferences.getTheme()); @@ -70,7 +72,10 @@ public class FeedItemlistActivity extends ActionBarActivity { } - private void loadData(long id) { + private synchronized void loadData(long id) { + if (currentLoadTask != null) { + currentLoadTask.cancel(true); + } AsyncTask loadTask = new AsyncTask() { @Override @@ -80,6 +85,12 @@ public class FeedItemlistActivity extends ActionBarActivity { return DBReader.getFeed(FeedItemlistActivity.this, longs[0]); } + @Override + protected void onCancelled(Feed feed) { + super.onCancelled(feed); + if (AppConfig.DEBUG) Log.d(TAG, "load task was cancelled"); + } + @Override protected void onPostExecute(Feed result) { super.onPostExecute(result); @@ -103,6 +114,7 @@ public class FeedItemlistActivity extends ActionBarActivity { } } }; + currentLoadTask = loadTask; loadTask.execute(id); } @@ -112,6 +124,14 @@ public class FeedItemlistActivity extends ActionBarActivity { StorageUtils.checkStorageAvailability(this); } + @Override + protected void onStop() { + super.onStop(); + if (currentLoadTask != null) { + currentLoadTask.cancel(true); + } + } + @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); diff --git a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java index 282bb4d5c..436210a70 100644 --- a/src/de/danoeh/antennapod/fragment/ItemlistFragment.java +++ b/src/de/danoeh/antennapod/fragment/ItemlistFragment.java @@ -125,21 +125,24 @@ public class ItemlistFragment extends ListFragment { } @Override - public void onDestroyView() { - super.onDestroyView(); + public void onStop() { + super.onStop(); EventDistributor.getInstance().unregister(contentUpdate); if (currentLoadTask != null) { currentLoadTask.cancel(true); } } - protected void loadData() { + protected synchronized void loadData() { final long feedId; if (feed == null) { feedId = getArguments().getLong(ARGUMENT_FEED_ID); } else { feedId = feed.getId(); } + if (currentLoadTask != null) { + currentLoadTask.cancel(true); + } AsyncTask loadTask = new AsyncTask(){ private volatile List queueRef;