Some ActivityThread/ActivityManager cleanup.
- Move PackageInfo out of ActivityThread, renaming to LoadedApk. - Rename some of the other PacakgeInfo inner classes to better represent what they are. - Rename HistoryRecord to ActivityRecord. - Introduce AppGlobals, to eventually let ActivityThread become package scoped. Change-Id: Ib714c54ceb3cdbb525dce3db9505f31042e88cf0
This commit is contained in:
File diff suppressed because it is too large
Load Diff
49
core/java/android/app/AppGlobals.java
Normal file
49
core/java/android/app/AppGlobals.java
Normal file
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (C) 2010 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.app;
|
||||
|
||||
import android.content.pm.IPackageManager;
|
||||
|
||||
/**
|
||||
* Special private access for certain globals related to a process.
|
||||
* @hide
|
||||
*/
|
||||
public class AppGlobals {
|
||||
/**
|
||||
* Return the first Application object made in the process.
|
||||
* NOTE: Only works on the main thread.
|
||||
*/
|
||||
public static Application getInitialApplication() {
|
||||
return ActivityThread.currentApplication();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the package name of the first .apk loaded into the process.
|
||||
* NOTE: Only works on the main thread.
|
||||
*/
|
||||
public static String getInitialPackage() {
|
||||
return ActivityThread.currentPackageName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the raw interface to the package manager.
|
||||
* @return
|
||||
*/
|
||||
public static IPackageManager getPackageManager() {
|
||||
return ActivityThread.getPackageManager();
|
||||
}
|
||||
}
|
||||
@@ -173,7 +173,7 @@ class ContextImpl extends Context {
|
||||
new HashMap<File, SharedPreferencesImpl>();
|
||||
|
||||
private AudioManager mAudioManager;
|
||||
/*package*/ ActivityThread.PackageInfo mPackageInfo;
|
||||
/*package*/ LoadedApk mPackageInfo;
|
||||
private Resources mResources;
|
||||
/*package*/ ActivityThread mMainThread;
|
||||
private Context mOuterContext;
|
||||
@@ -696,7 +696,7 @@ class ContextImpl extends Context {
|
||||
if (scheduler == null) {
|
||||
scheduler = mMainThread.getHandler();
|
||||
}
|
||||
rd = new ActivityThread.PackageInfo.ReceiverDispatcher(
|
||||
rd = new LoadedApk.ReceiverDispatcher(
|
||||
resultReceiver, getOuterContext(), scheduler, null, false).getIIntentReceiver();
|
||||
}
|
||||
}
|
||||
@@ -739,7 +739,7 @@ class ContextImpl extends Context {
|
||||
if (scheduler == null) {
|
||||
scheduler = mMainThread.getHandler();
|
||||
}
|
||||
rd = new ActivityThread.PackageInfo.ReceiverDispatcher(
|
||||
rd = new LoadedApk.ReceiverDispatcher(
|
||||
resultReceiver, getOuterContext(), scheduler, null, false).getIIntentReceiver();
|
||||
}
|
||||
}
|
||||
@@ -795,7 +795,7 @@ class ContextImpl extends Context {
|
||||
if (scheduler == null) {
|
||||
scheduler = mMainThread.getHandler();
|
||||
}
|
||||
rd = new ActivityThread.PackageInfo.ReceiverDispatcher(
|
||||
rd = new LoadedApk.ReceiverDispatcher(
|
||||
receiver, context, scheduler, null, true).getIIntentReceiver();
|
||||
}
|
||||
}
|
||||
@@ -1425,7 +1425,7 @@ class ContextImpl extends Context {
|
||||
return new ContextImpl(mMainThread.getSystemContext());
|
||||
}
|
||||
|
||||
ActivityThread.PackageInfo pi =
|
||||
LoadedApk pi =
|
||||
mMainThread.getPackageInfo(packageName, flags);
|
||||
if (pi != null) {
|
||||
ContextImpl c = new ContextImpl();
|
||||
@@ -1492,12 +1492,12 @@ class ContextImpl extends Context {
|
||||
mOuterContext = this;
|
||||
}
|
||||
|
||||
final void init(ActivityThread.PackageInfo packageInfo,
|
||||
final void init(LoadedApk packageInfo,
|
||||
IBinder activityToken, ActivityThread mainThread) {
|
||||
init(packageInfo, activityToken, mainThread, null);
|
||||
}
|
||||
|
||||
final void init(ActivityThread.PackageInfo packageInfo,
|
||||
final void init(LoadedApk packageInfo,
|
||||
IBinder activityToken, ActivityThread mainThread,
|
||||
Resources container) {
|
||||
mPackageInfo = packageInfo;
|
||||
|
||||
1103
core/java/android/app/LoadedApk.java
Normal file
1103
core/java/android/app/LoadedApk.java
Normal file
File diff suppressed because it is too large
Load Diff
@@ -18,6 +18,7 @@ package android.content;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.app.ActivityThread;
|
||||
import android.app.AppGlobals;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.res.AssetFileDescriptor;
|
||||
import android.content.res.Resources;
|
||||
@@ -1306,7 +1307,7 @@ public abstract class ContentResolver {
|
||||
// ActivityThread.currentPackageName() only returns non-null if the
|
||||
// current thread is an application main thread. This parameter tells
|
||||
// us whether an event loop is blocked, and if so, which app it is.
|
||||
String blockingPackage = ActivityThread.currentPackageName();
|
||||
String blockingPackage = AppGlobals.getInitialPackage();
|
||||
|
||||
EventLog.writeEvent(
|
||||
EventLogTags.CONTENT_QUERY_SAMPLE,
|
||||
@@ -1329,7 +1330,7 @@ public abstract class ContentResolver {
|
||||
}
|
||||
}
|
||||
}
|
||||
String blockingPackage = ActivityThread.currentPackageName();
|
||||
String blockingPackage = AppGlobals.getInitialPackage();
|
||||
EventLog.writeEvent(
|
||||
EventLogTags.CONTENT_UPDATE_SAMPLE,
|
||||
uri.toString(),
|
||||
|
||||
@@ -19,6 +19,7 @@ package android.database.sqlite;
|
||||
import com.google.android.collect.Maps;
|
||||
|
||||
import android.app.ActivityThread;
|
||||
import android.app.AppGlobals;
|
||||
import android.content.ContentValues;
|
||||
import android.database.Cursor;
|
||||
import android.database.DatabaseUtils;
|
||||
@@ -1921,7 +1922,7 @@ public class SQLiteDatabase extends SQLiteClosable {
|
||||
// main thread, or when we are invoked via Binder (e.g. ContentProvider).
|
||||
// Hopefully the full path to the database will be informative enough.
|
||||
|
||||
String blockingPackage = ActivityThread.currentPackageName();
|
||||
String blockingPackage = AppGlobals.getInitialPackage();
|
||||
if (blockingPackage == null) blockingPackage = "";
|
||||
|
||||
EventLog.writeEvent(
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
package com.google.android.gles_jni;
|
||||
|
||||
import android.app.ActivityThread;
|
||||
import android.app.AppGlobals;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.os.Build;
|
||||
@@ -65,7 +65,7 @@ public class GLImpl implements GL10, GL10Ext, GL11, GL11Ext, GL11ExtensionPack {
|
||||
private static boolean allowIndirectBuffers(String appName) {
|
||||
boolean result = false;
|
||||
int version = 0;
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
IPackageManager pm = AppGlobals.getPackageManager();
|
||||
try {
|
||||
ApplicationInfo applicationInfo = pm.getApplicationInfo(appName, 0);
|
||||
if (applicationInfo != null) {
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
package com.android.server;
|
||||
|
||||
import android.app.ActivityManagerNative;
|
||||
import android.app.ActivityThread;
|
||||
import android.app.AlarmManager;
|
||||
import android.app.AppGlobals;
|
||||
import android.app.IActivityManager;
|
||||
import android.app.IApplicationThread;
|
||||
import android.app.IBackupAgent;
|
||||
@@ -399,7 +399,7 @@ class BackupManagerService extends IBackupManager.Stub {
|
||||
public BackupManagerService(Context context) {
|
||||
mContext = context;
|
||||
mPackageManager = context.getPackageManager();
|
||||
mPackageManagerBinder = ActivityThread.getPackageManager();
|
||||
mPackageManagerBinder = AppGlobals.getPackageManager();
|
||||
mActivityManager = ActivityManagerNative.getDefault();
|
||||
|
||||
mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -42,7 +42,7 @@ import java.util.HashSet;
|
||||
/**
|
||||
* An entry in the history stack, representing an activity.
|
||||
*/
|
||||
class HistoryRecord extends IApplicationToken.Stub {
|
||||
class ActivityRecord extends IApplicationToken.Stub {
|
||||
final ActivityManagerService service; // owner
|
||||
final ActivityInfo info; // all about me
|
||||
final int launchedFromUid; // always the uid who started the activity.
|
||||
@@ -68,7 +68,7 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
long startTime; // when we starting launching this activity
|
||||
long cpuTimeAtResume; // the cpu time of host process at the time of resuming activity
|
||||
Configuration configuration; // configuration activity was last running in
|
||||
HistoryRecord resultTo; // who started this entry, so will get our reply
|
||||
ActivityRecord resultTo; // who started this entry, so will get our reply
|
||||
final String resultWho; // additional identifier for use by resultTo.
|
||||
final int requestCode; // code given by requester (resultTo)
|
||||
ArrayList results; // pending ActivityResult objs we have received
|
||||
@@ -175,10 +175,10 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
HistoryRecord(ActivityManagerService _service, ProcessRecord _caller,
|
||||
ActivityRecord(ActivityManagerService _service, ProcessRecord _caller,
|
||||
int _launchedFromUid, Intent _intent, String _resolvedType,
|
||||
ActivityInfo aInfo, Configuration _configuration,
|
||||
HistoryRecord _resultTo, String _resultWho, int _reqCode,
|
||||
ActivityRecord _resultTo, String _resultWho, int _reqCode,
|
||||
boolean _componentSpecified) {
|
||||
service = _service;
|
||||
info = aInfo;
|
||||
@@ -297,7 +297,7 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
void addResultLocked(HistoryRecord from, String resultWho,
|
||||
void addResultLocked(ActivityRecord from, String resultWho,
|
||||
int requestCode, int resultCode,
|
||||
Intent resultData) {
|
||||
ActivityResult r = new ActivityResult(from, resultWho,
|
||||
@@ -308,7 +308,7 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
results.add(r);
|
||||
}
|
||||
|
||||
void removeResultsLocked(HistoryRecord from, String resultWho,
|
||||
void removeResultsLocked(ActivityRecord from, String resultWho,
|
||||
int requestCode) {
|
||||
if (results != null) {
|
||||
for (int i=results.size()-1; i>=0; i--) {
|
||||
@@ -418,7 +418,7 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
final int N = service.mWaitingVisibleActivities.size();
|
||||
if (N > 0) {
|
||||
for (int i=0; i<N; i++) {
|
||||
HistoryRecord r = (HistoryRecord)
|
||||
ActivityRecord r = (ActivityRecord)
|
||||
service.mWaitingVisibleActivities.get(i);
|
||||
r.waitingVisible = false;
|
||||
if (ActivityManagerService.DEBUG_SWITCH) Log.v(
|
||||
@@ -442,11 +442,11 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
nowVisible = false;
|
||||
}
|
||||
|
||||
private HistoryRecord getWaitingHistoryRecordLocked() {
|
||||
private ActivityRecord getWaitingHistoryRecordLocked() {
|
||||
// First find the real culprit... if we are waiting
|
||||
// for another app to start, then we have paused dispatching
|
||||
// for this activity.
|
||||
HistoryRecord r = this;
|
||||
ActivityRecord r = this;
|
||||
if (r.waitingVisible) {
|
||||
// Hmmm, who might we be waiting for?
|
||||
r = service.mResumedActivity;
|
||||
@@ -463,7 +463,7 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
}
|
||||
|
||||
public boolean keyDispatchingTimedOut() {
|
||||
HistoryRecord r;
|
||||
ActivityRecord r;
|
||||
ProcessRecord anrApp = null;
|
||||
synchronized(service) {
|
||||
r = getWaitingHistoryRecordLocked();
|
||||
@@ -501,7 +501,7 @@ class HistoryRecord extends IApplicationToken.Stub {
|
||||
/** Returns the key dispatching timeout for this application token. */
|
||||
public long getKeyDispatchingTimeout() {
|
||||
synchronized(service) {
|
||||
HistoryRecord r = getWaitingHistoryRecordLocked();
|
||||
ActivityRecord r = getWaitingHistoryRecordLocked();
|
||||
if (r == null || r.app == null
|
||||
|| r.app.instrumentationClass == null) {
|
||||
return ActivityManagerService.KEY_DISPATCHING_TIMEOUT;
|
||||
@@ -24,9 +24,9 @@ import android.os.Bundle;
|
||||
* Pending result information to send back to an activity.
|
||||
*/
|
||||
class ActivityResult extends ResultInfo {
|
||||
final HistoryRecord mFrom;
|
||||
final ActivityRecord mFrom;
|
||||
|
||||
public ActivityResult(HistoryRecord from, String resultWho,
|
||||
public ActivityResult(ActivityRecord from, String resultWho,
|
||||
int requestCode, int resultCode, Intent data) {
|
||||
super(resultWho, requestCode, resultCode, data);
|
||||
mFrom = from;
|
||||
|
||||
@@ -40,7 +40,7 @@ class AppNotRespondingDialog extends BaseErrorDialog {
|
||||
private final ProcessRecord mProc;
|
||||
|
||||
public AppNotRespondingDialog(ActivityManagerService service, Context context,
|
||||
ProcessRecord app, HistoryRecord activity) {
|
||||
ProcessRecord app, ActivityRecord activity) {
|
||||
super(context);
|
||||
|
||||
mService = service;
|
||||
|
||||
@@ -26,7 +26,7 @@ import java.io.PrintWriter;
|
||||
*/
|
||||
class ConnectionRecord {
|
||||
final AppBindRecord binding; // The application/service binding.
|
||||
final HistoryRecord activity; // If non-null, the owning activity.
|
||||
final ActivityRecord activity; // If non-null, the owning activity.
|
||||
final IServiceConnection conn; // The client connection.
|
||||
final int flags; // Binding options.
|
||||
final int clientLabel; // String resource labeling this client.
|
||||
@@ -42,7 +42,7 @@ class ConnectionRecord {
|
||||
+ " flags=0x" + Integer.toHexString(flags));
|
||||
}
|
||||
|
||||
ConnectionRecord(AppBindRecord _binding, HistoryRecord _activity,
|
||||
ConnectionRecord(AppBindRecord _binding, ActivityRecord _activity,
|
||||
IServiceConnection _conn, int _flags,
|
||||
int _clientLabel, PendingIntent _clientIntent) {
|
||||
binding = _binding;
|
||||
|
||||
@@ -42,7 +42,7 @@ class PendingIntentRecord extends IIntentSender.Stub {
|
||||
final static class Key {
|
||||
final int type;
|
||||
final String packageName;
|
||||
final HistoryRecord activity;
|
||||
final ActivityRecord activity;
|
||||
final String who;
|
||||
final int requestCode;
|
||||
final Intent requestIntent;
|
||||
@@ -52,7 +52,7 @@ class PendingIntentRecord extends IIntentSender.Stub {
|
||||
|
||||
private static final int ODD_PRIME_NUMBER = 37;
|
||||
|
||||
Key(int _t, String _p, HistoryRecord _a, String _w,
|
||||
Key(int _t, String _p, ActivityRecord _a, String _w,
|
||||
int _r, Intent _i, String _it, int _f) {
|
||||
type = _t;
|
||||
packageName = _p;
|
||||
|
||||
@@ -86,7 +86,7 @@ class ProcessRecord implements Watchdog.PssRequestor {
|
||||
Object adjTarget; // Debugging: target component impacting oom_adj.
|
||||
|
||||
// contains HistoryRecord objects
|
||||
final ArrayList<HistoryRecord> activities = new ArrayList<HistoryRecord>();
|
||||
final ArrayList<ActivityRecord> activities = new ArrayList<ActivityRecord>();
|
||||
// all ServiceRecord running in this process
|
||||
final HashSet<ServiceRecord> services = new HashSet<ServiceRecord>();
|
||||
// services that are currently executing code (need to remain foreground).
|
||||
@@ -248,7 +248,7 @@ class ProcessRecord implements Watchdog.PssRequestor {
|
||||
public boolean isInterestingToUserLocked() {
|
||||
final int size = activities.size();
|
||||
for (int i = 0 ; i < size ; i++) {
|
||||
HistoryRecord r = activities.get(i);
|
||||
ActivityRecord r = activities.get(i);
|
||||
if (r.isInterestingToUserLocked()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ class UriPermission {
|
||||
final Uri uri;
|
||||
int modeFlags = 0;
|
||||
int globalModeFlags = 0;
|
||||
final HashSet<HistoryRecord> readActivities = new HashSet<HistoryRecord>();
|
||||
final HashSet<HistoryRecord> writeActivities = new HashSet<HistoryRecord>();
|
||||
final HashSet<ActivityRecord> readActivities = new HashSet<ActivityRecord>();
|
||||
final HashSet<ActivityRecord> writeActivities = new HashSet<ActivityRecord>();
|
||||
|
||||
String stringName;
|
||||
|
||||
@@ -42,7 +42,7 @@ class UriPermission {
|
||||
globalModeFlags &= ~Intent.FLAG_GRANT_READ_URI_PERMISSION;
|
||||
modeFlags &= ~Intent.FLAG_GRANT_READ_URI_PERMISSION;
|
||||
if (readActivities.size() > 0) {
|
||||
for (HistoryRecord r : readActivities) {
|
||||
for (ActivityRecord r : readActivities) {
|
||||
r.readUriPermissions.remove(this);
|
||||
if (r.readUriPermissions.size() == 0) {
|
||||
r.readUriPermissions = null;
|
||||
@@ -55,7 +55,7 @@ class UriPermission {
|
||||
globalModeFlags &= ~Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
|
||||
modeFlags &= ~Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
|
||||
if (readActivities.size() > 0) {
|
||||
for (HistoryRecord r : readActivities) {
|
||||
for (ActivityRecord r : readActivities) {
|
||||
r.writeUriPermissions.remove(this);
|
||||
if (r.writeUriPermissions.size() == 0) {
|
||||
r.writeUriPermissions = null;
|
||||
|
||||
Reference in New Issue
Block a user