am 3681f26: LocationManager: Recover if process containing NetworkLocat

Merge commit '3681f2614fa8c10560c790f6b4287f65d6fd2663'

* commit '3681f2614fa8c10560c790f6b4287f65d6fd2663':
  LocationManager:  Recover if process containing NetworkLocation provider crashes
This commit is contained in:
Mike Lockwood
2009-05-12 07:58:55 -07:00
committed by The Android Open Source Project
2 changed files with 33 additions and 3 deletions

View File

@ -21,6 +21,7 @@ import android.location.ILocationProvider;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
@ -31,7 +32,7 @@ import java.util.List;
*
* {@hide}
*/
public class LocationProviderProxy {
public class LocationProviderProxy implements IBinder.DeathRecipient {
private static final String TAG = "LocationProviderProxy";
@ -39,16 +40,27 @@ public class LocationProviderProxy {
private final ILocationProvider mProvider;
private boolean mLocationTracking = false;
private long mMinTime = 0;
private boolean mDead;
public LocationProviderProxy(String name, ILocationProvider provider) {
mName = name;
mProvider = provider;
try {
provider.asBinder().linkToDeath(this, 0);
} catch (RemoteException e) {
Log.e(TAG, "linkToDeath failed", e);
mDead = true;
}
}
public String getName() {
return mName;
}
public boolean isDead() {
return mDead;
}
public boolean requiresNetwork() {
try {
return mProvider.requiresNetwork();
@ -231,4 +243,9 @@ public class LocationProviderProxy {
Log.e(TAG, "removeListener failed", e);
}
}
public void binderDied() {
Log.w(TAG, "Location Provider " + mName + " died");
mDead = true;
}
}