From 9598ba52d4d79c524289f106b244f966f517a32f Mon Sep 17 00:00:00 2001 From: Tim Su Date: Sun, 12 Sep 2010 19:41:06 +0800 Subject: [PATCH] Moving reminder scheduling into a background service to prevent ANR dialogs --- astrid/AndroidManifest.xml | 1 + .../reminders/ReminderSchedulingService.java | 39 +++++++++++++++++++ .../reminders/ReminderStartupReceiver.java | 21 +++------- .../astrid/service/StartupService.java | 14 +++---- 4 files changed, 50 insertions(+), 25 deletions(-) create mode 100644 astrid/plugin-src/com/todoroo/astrid/reminders/ReminderSchedulingService.java diff --git a/astrid/AndroidManifest.xml b/astrid/AndroidManifest.xml index a54e0e0c1..a3c7e6f89 100644 --- a/astrid/AndroidManifest.xml +++ b/astrid/AndroidManifest.xml @@ -382,6 +382,7 @@ android:finishOnTaskLaunch="true" android:clearTaskOnLaunch="true"> + diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderSchedulingService.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderSchedulingService.java new file mode 100644 index 000000000..78671a075 --- /dev/null +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderSchedulingService.java @@ -0,0 +1,39 @@ +package com.todoroo.astrid.reminders; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; + +import com.todoroo.andlib.service.ContextManager; +import com.todoroo.astrid.alarms.AlarmService; + +/** + * Schedules reminders in the background to prevent ANR's + * + * @author Tim Su + * + */ +public class ReminderSchedulingService extends Service { + + /** Receive the alarm - start the synchronize service! */ + @SuppressWarnings("nls") + @Override + public void onStart(Intent intent, int startId) { + ContextManager.setContext(this); + try { + ReminderService.getInstance().scheduleAllAlarms(); + AlarmService.getInstance().scheduleAllAlarms(); + } catch (Exception e) { + Log.e("reminder-scheduling", "reminder-startup", e); + } + + stopSelf(); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + +} diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderStartupReceiver.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderStartupReceiver.java index a210bbed0..43f7b5c2a 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderStartupReceiver.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderStartupReceiver.java @@ -4,11 +4,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import com.todoroo.andlib.service.Autowired; -import com.todoroo.andlib.service.ContextManager; -import com.todoroo.andlib.service.DependencyInjectionService; -import com.todoroo.andlib.service.ExceptionService; -import com.todoroo.astrid.alarms.AlarmService; import com.todoroo.astrid.service.AstridDependencyInjector; /** @@ -25,19 +20,13 @@ public class ReminderStartupReceiver extends BroadcastReceiver { // --- system startup - @Autowired - ExceptionService exceptionService; - @Override /** Called when the system is started up */ public void onReceive(Context context, Intent intent) { - ContextManager.setContext(context); - try { - ReminderService.getInstance().scheduleAllAlarms(); - AlarmService.getInstance().scheduleAllAlarms(); - } catch (Exception e) { - DependencyInjectionService.getInstance().inject(this); - exceptionService.reportError("reminder-startup", e); //$NON-NLS-1$ - } + startReminderSchedulingService(context); + } + + public static void startReminderSchedulingService(Context context) { + context.startService(new Intent(context, ReminderSchedulingService.class)); } } diff --git a/astrid/src/com/todoroo/astrid/service/StartupService.java b/astrid/src/com/todoroo/astrid/service/StartupService.java index 7a7ac016a..5ddf2f265 100644 --- a/astrid/src/com/todoroo/astrid/service/StartupService.java +++ b/astrid/src/com/todoroo/astrid/service/StartupService.java @@ -3,6 +3,8 @@ package com.todoroo.astrid.service; import java.io.File; import java.util.List; +import org.weloveastrid.rmilk.MilkUtilities; + import android.Manifest; import android.app.AlarmManager; import android.app.AlertDialog; @@ -23,14 +25,13 @@ import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.service.ExceptionService.TodorooUncaughtExceptionHandler; import com.todoroo.andlib.utility.AndroidUtilities; -import com.todoroo.astrid.alarms.AlarmService; import com.todoroo.astrid.backup.BackupConstants; import com.todoroo.astrid.backup.BackupService; import com.todoroo.astrid.backup.TasksXmlImporter; import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.producteev.ProducteevBackgroundService; import com.todoroo.astrid.producteev.ProducteevUtilities; -import com.todoroo.astrid.reminders.ReminderService; +import com.todoroo.astrid.reminders.ReminderStartupReceiver; import com.todoroo.astrid.utility.Constants; import com.todoroo.astrid.utility.Preferences; import com.todoroo.astrid.widget.TasksWidget.UpdateService; @@ -126,16 +127,11 @@ public class StartupService { taskService.cleanup(); // schedule alarms - try { - ReminderService.getInstance().scheduleAllAlarms(); - AlarmService.getInstance().scheduleAllAlarms(); - } catch (Exception e) { - DependencyInjectionService.getInstance().inject(this); - exceptionService.reportError("reminder-startup", e); //$NON-NLS-1$ - } + ReminderStartupReceiver.startReminderSchedulingService(context); // if sync ongoing flag was set, clear it ProducteevUtilities.INSTANCE.stopOngoing(); + MilkUtilities.INSTANCE.stopOngoing(); ProducteevBackgroundService.scheduleService(); BackupService.scheduleService(context);