Refactored some receiver unregistering to prevent leaks and crashes

pull/14/head
Sam Bosley 13 years ago
parent 091fdc517c
commit cdeaf16ea8

@ -21,6 +21,7 @@ import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import android.app.Activity; import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -761,4 +762,18 @@ public class AndroidUtilities {
return false; return false;
} }
/**
* Wraps a call to Activity.unregisterReceiver in a try/catch block to prevent
* exceptions being thrown if receiver was never registered with that activity
* @param activity
* @param receiver
*/
public static void tryUnregisterReceiver(Activity activity, BroadcastReceiver receiver) {
try {
activity.unregisterReceiver(receiver);
} catch (IllegalArgumentException e) {
// Receiver wasn't registered for some reason
}
}
} }

@ -124,16 +124,8 @@ public class AstridActivity extends FragmentActivity
@Override @Override
protected void onPause() { protected void onPause() {
super.onPause(); super.onPause();
tryUnregisterReceiver(reminderReceiver); AndroidUtilities.tryUnregisterReceiver(this, reminderReceiver);
tryUnregisterReceiver(repeatConfirmationReceiver); AndroidUtilities.tryUnregisterReceiver(this, repeatConfirmationReceiver);
}
public void tryUnregisterReceiver(BroadcastReceiver receiver) {
try {
unregisterReceiver(receiver);
} catch (IllegalArgumentException e) {
// Receiver wasn't registered for some reason
}
} }
/** /**

@ -611,13 +611,11 @@ public class TaskListFragment extends ListFragment implements OnScrollListener,
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
StatisticsService.sessionPause(); StatisticsService.sessionPause();
try {
getActivity().unregisterReceiver(detailReceiver); AndroidUtilities.tryUnregisterReceiver(getActivity(), detailReceiver);
getActivity().unregisterReceiver(refreshReceiver); AndroidUtilities.tryUnregisterReceiver(getActivity(), refreshReceiver);
syncActionHelper.unregister(); syncActionHelper.unregister();
} catch (IllegalArgumentException e) {
// might not have fully initialized
}
backgroundTimer.cancel(); backgroundTimer.cancel();
} }

@ -27,6 +27,7 @@ import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ContextManager;
import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService; import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.Preferences;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
@ -128,7 +129,7 @@ public class SyncActionHelper {
} }
public void unregister() { public void unregister() {
activity.unregisterReceiver(syncActionReceiver); AndroidUtilities.tryUnregisterReceiver(activity, syncActionReceiver);
} }
public void request() { public void request() {

Loading…
Cancel
Save