mxardre / android-protips-location

Automatically exported from code.google.com/p/android-protips-location
0 stars 0 forks source link

unregisterReciever on cancel() ? #4

Open GoogleCodeExporter opened 8 years ago

GoogleCodeExporter commented 8 years ago
Hi,

great stuff an I'm using it in my current project. I found that under some 
conditions (getLastBestLocation has asked for an update and has registered a 
broadcast reciever but not received an update before I call cancel()) this one 
can appear: 

07-12 13:54:00.388: ERROR/ActivityThread(496): Service 
com.eventorama.mobi.lib.service.GetLocationService has leaked IntentReceiver 
com.eventorama.mobi.lib.location.GingerBreadLocationFinder$1@405f5d40 that was 
originally registered here. Are you missing a call to unregisterReceiver()?

I changed the cancel() method for example of the GingerBreadLocationFinder to:

public void cancel() {
    locationManager.removeUpdates(singleUpatePI);
    context.unregisterReceiver(singleUpdateReceiver);
 }

which fixes the issue. 

Keep the good examples going it's really a valuable resource!

Original issue reported on code.google.com by dominik....@gmail.com on 12 Jul 2011 at 12:32

GoogleCodeExporter commented 8 years ago
I had to wrap that in a try/catch as sometimes there was an Exception if the 
receiver had not been registered.

Also, I added:

lastLocationFinder.cancel();

to onPause() in the main activity (for my app at least this was required)

Original comment by bjw...@gmail.com on 22 Jul 2011 at 2:18

GoogleCodeExporter commented 8 years ago
I also had to wrap the unregisterReceiver(singleUpdateReceiver) in a try-catch 
because the onReceive method was getting called twice and on the second time it 
triggered an IllegalArgumentException because the receiver had been 
unregistered on the first call to onReceive. Anyone know why the onReceive is 
called twice sometimes? One way to test this is to comment out the if check in 
GingerbreadLastLocationFinder.getLastBestLocation(...) to force the receiver 
registration.

Original comment by jerrell....@gmail.com on 28 Jul 2011 at 2:57

GoogleCodeExporter commented 8 years ago
in cancel() method check the boolean flag indicating if the receiver has been 
already unregistered in onReceive()

Original comment by biegl...@gmail.com on 18 Feb 2014 at 12:30