From 22fb9c2317198a3c3c13761fd36ece68bf34c91a Mon Sep 17 00:00:00 2001 From: daniel oeh Date: Wed, 1 Aug 2012 00:47:35 +0200 Subject: Queueing all feeds is now done in an asynctask to avoid lag --- src/de/danoeh/antennapod/feed/FeedManager.java | 37 +++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) (limited to 'src/de/danoeh/antennapod/feed') diff --git a/src/de/danoeh/antennapod/feed/FeedManager.java b/src/de/danoeh/antennapod/feed/FeedManager.java index b4aff7bb0..e59721574 100644 --- a/src/de/danoeh/antennapod/feed/FeedManager.java +++ b/src/de/danoeh/antennapod/feed/FeedManager.java @@ -13,9 +13,11 @@ import de.danoeh.antennapod.service.PlaybackService; import de.danoeh.antennapod.storage.*; import de.danoeh.antennapod.util.FeedtitleComparator; import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator; +import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.database.Cursor; +import android.os.AsyncTask; import android.os.Debug; import android.util.Log; @@ -51,6 +53,9 @@ public class FeedManager { private DownloadRequester requester; + /** Prevents user from starting several feed updates at the same time. */ + private static boolean isStartingFeedRefresh = false; + private FeedManager() { feeds = Collections.synchronizedList(new ArrayList()); categories = new ArrayList(); @@ -213,12 +218,38 @@ public class FeedManager { sendUnreadItemsUpdateBroadcast(context, null); } - public void refreshAllFeeds(Context context) { + @SuppressLint("NewApi") + public void refreshAllFeeds(final Context context) { if (AppConfig.DEBUG) Log.d(TAG, "Refreshing all feeds."); - for (Feed feed : feeds) { - refreshFeed(context, feed); + if (!isStartingFeedRefresh) { + isStartingFeedRefresh = true; + AsyncTask updateWorker = new AsyncTask() { + + @Override + protected void onPostExecute(Void result) { + if (AppConfig.DEBUG) + Log.d(TAG, + "All feeds have been sent to the downloadmanager"); + isStartingFeedRefresh = false; + } + + @Override + protected Void doInBackground(Void... params) { + for (Feed feed : feeds) { + refreshFeed(context, feed); + } + return null; + } + + }; + if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD_MR1) { + updateWorker.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } else { + updateWorker.execute(); + } } + } /** -- cgit v1.2.3