am 733f1474: Merge "Always have a handler for PendingIntents sent in the system process" into mnc-dev
* commit '733f147401f180b14acb13137cf99e65da1d72cc': Always have a handler for PendingIntents sent in the system process
This commit is contained in:
@@ -1640,6 +1640,10 @@ public final class ActivityThread {
|
|||||||
return sCurrentActivityThread;
|
return sCurrentActivityThread;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isSystem() {
|
||||||
|
return (sCurrentActivityThread != null) ? sCurrentActivityThread.mSystemThread : false;
|
||||||
|
}
|
||||||
|
|
||||||
public static String currentOpPackageName() {
|
public static String currentOpPackageName() {
|
||||||
ActivityThread am = currentActivityThread();
|
ActivityThread am = currentActivityThread();
|
||||||
return (am != null && am.getApplication() != null)
|
return (am != null && am.getApplication() != null)
|
||||||
|
|||||||
@@ -25,11 +25,13 @@ import android.content.IIntentReceiver;
|
|||||||
import android.content.IIntentSender;
|
import android.content.IIntentSender;
|
||||||
import android.content.IntentSender;
|
import android.content.IntentSender;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.os.Process;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.util.AndroidException;
|
import android.util.AndroidException;
|
||||||
|
|
||||||
@@ -206,10 +208,20 @@ public final class PendingIntent implements Parcelable {
|
|||||||
private int mResultCode;
|
private int mResultCode;
|
||||||
private String mResultData;
|
private String mResultData;
|
||||||
private Bundle mResultExtras;
|
private Bundle mResultExtras;
|
||||||
|
private static Handler sDefaultSystemHandler;
|
||||||
FinishedDispatcher(PendingIntent pi, OnFinished who, Handler handler) {
|
FinishedDispatcher(PendingIntent pi, OnFinished who, Handler handler) {
|
||||||
mPendingIntent = pi;
|
mPendingIntent = pi;
|
||||||
mWho = who;
|
mWho = who;
|
||||||
mHandler = handler;
|
if (handler == null && ActivityThread.isSystem()) {
|
||||||
|
// We assign a default handler for the system process to avoid deadlocks when
|
||||||
|
// processing receivers in various components that hold global service locks.
|
||||||
|
if (sDefaultSystemHandler == null) {
|
||||||
|
sDefaultSystemHandler = new Handler(Looper.getMainLooper());
|
||||||
|
}
|
||||||
|
mHandler = sDefaultSystemHandler;
|
||||||
|
} else {
|
||||||
|
mHandler = handler;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public void performReceive(Intent intent, int resultCode, String data,
|
public void performReceive(Intent intent, int resultCode, String data,
|
||||||
Bundle extras, boolean serialized, boolean sticky, int sendingUser) {
|
Bundle extras, boolean serialized, boolean sticky, int sendingUser) {
|
||||||
|
|||||||
Reference in New Issue
Block a user