Don't crash in various ways when using backup services too early

BackupManager now no longer tries to use a null service binder if it's used
early during the boot process.  ActivityManagerService no longer tries to
dereference null pointers if bind/unbind semantics get out of step due to things
being run too early.
This commit is contained in:
Christopher Tate
2009-06-26 11:49:18 -07:00
parent c73a218c26
commit 8a27f923eb
2 changed files with 19 additions and 6 deletions

View File

@@ -68,9 +68,11 @@ public class BackupManager {
* {@link android.app.BackupAgent} subclass will be scheduled when you call this method.
*/
public void dataChanged() {
try {
mService.dataChanged(mContext.getPackageName());
} catch (RemoteException e) {
if (mService != null) {
try {
mService.dataChanged(mContext.getPackageName());
} catch (RemoteException e) {
}
}
}
@@ -83,9 +85,11 @@ public class BackupManager {
*/
public IRestoreSession beginRestoreSession(int transportID) {
IRestoreSession binder = null;
try {
binder = mService.beginRestoreSession(transportID);
} catch (RemoteException e) {
if (mService != null) {
try {
binder = mService.beginRestoreSession(transportID);
} catch (RemoteException e) {
}
}
return binder;
}

View File

@@ -10472,8 +10472,17 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
// done with this agent
public void unbindBackupAgent(ApplicationInfo appInfo) {
if (DEBUG_BACKUP) Log.v(TAG, "unbindBackupAgent: " + appInfo);
if (appInfo == null) {
Log.w(TAG, "unbind backup agent for null app");
return;
}
synchronized(this) {
if (mBackupAppName == null) {
Log.w(TAG, "Unbinding backup agent with no active backup");
return;
}
if (!mBackupAppName.equals(appInfo.packageName)) {
Log.e(TAG, "Unbind of " + appInfo + " but is not the current backup target");
return;