BaseActivityManagerService.java 源代码
package com.x8zs.morgoo.droidplugin.am;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.ProviderInfo;
import android.content.pm.ServiceInfo;
import android.os.Bundle;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import com.x8zs.morgoo.droidplugin.pm.IApplicationCallback;
import com.x8zs.morgoo.droidplugin.pm.IPluginManagerImpl;
import com.x8zs.morgoo.droidplugin.pm.parser.PluginPackageParser;
import com.x8zs.morgoo.helper.Log;
import java.util.List;
import java.util.Map;
public abstract class BaseActivityManagerService {
private static final String TAG = "BaseActivityManagerService";
protected Context mHostContext;
private RemoteCallbackList<IApplicationCallback> mRemoteCallbackList;
private class MyRemoteCallbackList extends RemoteCallbackList<IApplicationCallback> {
private MyRemoteCallbackList() {
}
@Override
public void onCallbackDied(IApplicationCallback iApplicationCallback, Object obj) {
super.onCallbackDied((MyRemoteCallbackList) iApplicationCallback, obj);
if (obj == null || !(obj instanceof ProcessCookie)) {
return;
}
ProcessCookie processCookie = (ProcessCookie) obj;
BaseActivityManagerService.this.onProcessDied(processCookie.pid, processCookie.uid);
}
}
public static class ProcessCookie {
private final int pid;
private final int uid;
private ProcessCookie(int i6, int i7) {
this.pid = i6;
this.uid = i7;
}
}
public BaseActivityManagerService(Context context) {
this.mHostContext = context;
}
public abstract List<String> getPackageNamesByPid(int i6);
public String getProcessNameByPid(int i6) {
return null;
}
public abstract ServiceInfo getTargetServiceInfo(int i6, int i7, ServiceInfo serviceInfo);
public void onActivityCreated(int i6, int i7, ActivityInfo activityInfo, ActivityInfo activityInfo2) {
}
public void onActivityDestory(int i6, int i7, ActivityInfo activityInfo, ActivityInfo activityInfo2) {
}
public abstract void onActivtyOnNewIntent(int i6, int i7, ActivityInfo activityInfo, ActivityInfo activityInfo2, Intent intent);
public void onCreate(IPluginManagerImpl iPluginManagerImpl) {
if (this.mRemoteCallbackList == null) {
this.mRemoteCallbackList = new MyRemoteCallbackList();
}
}
public void onDestory() {
this.mRemoteCallbackList.kill();
this.mRemoteCallbackList = null;
}
public void onPkgDeleted(Map<String, PluginPackageParser> map, PluginPackageParser pluginPackageParser, String str) {
}
public void onPkgInstalled(Map<String, PluginPackageParser> map, PluginPackageParser pluginPackageParser, String str) {
}
public void onProcessDied(int i6, int i7) {
Log.i(TAG, "onProcessDied,pid=%s,uid=%s", Integer.valueOf(i6), Integer.valueOf(i7));
}
public void onProviderCreated(int i6, int i7, ProviderInfo providerInfo, ProviderInfo providerInfo2) {
}
public void onReportMyProcessName(int i6, int i7, String str, String str2, String str3) {
}
public void onServiceCreated(int i6, int i7, ServiceInfo serviceInfo, ServiceInfo serviceInfo2) {
}
public void onServiceDestory(int i6, int i7, ServiceInfo serviceInfo, ServiceInfo serviceInfo2) {
}
public boolean registerApplicationCallback(int i6, int i7, IApplicationCallback iApplicationCallback) {
return this.mRemoteCallbackList.register(iApplicationCallback, new ProcessCookie(i6, i7));
}
public abstract ActivityInfo selectStubActivityInfo(int i6, int i7, ActivityInfo activityInfo);
public abstract ProviderInfo selectStubProviderInfo(int i6, int i7, ProviderInfo providerInfo);
public abstract ServiceInfo selectStubServiceInfo(int i6, int i7, ServiceInfo serviceInfo);
protected void sendCallBack(Bundle bundle) {
RemoteCallbackList<IApplicationCallback> remoteCallbackList = this.mRemoteCallbackList;
if (remoteCallbackList != null) {
int beginBroadcast = remoteCallbackList.beginBroadcast();
while (beginBroadcast > 0) {
beginBroadcast--;
try {
this.mRemoteCallbackList.getBroadcastItem(beginBroadcast).onCallback(bundle);
} catch (RemoteException unused) {
}
}
this.mRemoteCallbackList.finishBroadcast();
}
}
public boolean unregisterApplicationCallback(int i6, int i7, IApplicationCallback iApplicationCallback) {
return this.mRemoteCallbackList.unregister(iApplicationCallback);
}
}