summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/app/ActivityThread.java75
-rw-r--r--core/java/android/app/Application.java76
2 files changed, 13 insertions, 138 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 43693e1983b7..2e4ce1886fd6 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -2666,14 +2666,8 @@ public final class ActivityThread {
Activity activity = null;
try {
java.lang.ClassLoader cl = appContext.getClassLoader();
- if (appContext.getApplicationContext() instanceof Application) {
- activity = ((Application) appContext.getApplicationContext())
- .instantiateActivity(cl, component.getClassName(), r.intent);
- }
- if (activity == null) {
- activity = mInstrumentation.newActivity(
- cl, component.getClassName(), r.intent);
- }
+ activity = mInstrumentation.newActivity(
+ cl, component.getClassName(), r.intent);
StrictMode.incrementExpectedActivityCount(activity.getClass());
r.intent.setExtrasClassLoader(cl);
r.intent.prepareToEnterProcess();
@@ -3169,8 +3163,7 @@ public final class ActivityThread {
data.intent.setExtrasClassLoader(cl);
data.intent.prepareToEnterProcess();
data.setExtrasClassLoader(cl);
- receiver = instantiate(cl, component, data.intent, app,
- Application::instantiateReceiver);
+ receiver = (BroadcastReceiver)cl.loadClass(component).newInstance();
} catch (Exception e) {
if (DEBUG_BROADCAST) Slog.i(TAG,
"Finishing failed broadcast to " + data.intent.getComponent());
@@ -3258,13 +3251,12 @@ public final class ActivityThread {
} else {
try {
if (DEBUG_BACKUP) Slog.v(TAG, "Initializing agent class " + classname);
- ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
java.lang.ClassLoader cl = packageInfo.getClassLoader();
- agent = instantiate(cl, classname, context,
- Application::instantiateBackupAgent);
+ agent = (BackupAgent) cl.loadClass(classname).newInstance();
// set up the agent's context
+ ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
context.setOuterContext(agent);
agent.attach(context);
@@ -3324,12 +3316,9 @@ public final class ActivityThread {
LoadedApk packageInfo = getPackageInfoNoCheck(
data.info.applicationInfo, data.compatInfo);
Service service = null;
- Application app = null;
try {
- app = packageInfo.makeApplication(false, mInstrumentation);
java.lang.ClassLoader cl = packageInfo.getClassLoader();
- service = instantiate(cl, data.info.name, data.intent, app,
- Application::instantiateService);
+ service = (Service) cl.loadClass(data.info.name).newInstance();
} catch (Exception e) {
if (!mInstrumentation.onException(service, e)) {
throw new RuntimeException(
@@ -3344,6 +3333,7 @@ public final class ActivityThread {
ContextImpl context = ContextImpl.createAppContext(this, packageInfo);
context.setOuterContext(service);
+ Application app = packageInfo.makeApplication(false, mInstrumentation);
service.attach(context, this, data.info.name, data.token, app,
ActivityManager.getService());
service.onCreate();
@@ -5682,8 +5672,8 @@ public final class ActivityThread {
try {
final ClassLoader cl = instrContext.getClassLoader();
- mInstrumentation = instantiate(cl, data.instrumentationName.getClassName(),
- instrContext, Application::instantiateInstrumentation);
+ mInstrumentation = (Instrumentation)
+ cl.loadClass(data.instrumentationName.getClassName()).newInstance();
} catch (Exception e) {
throw new RuntimeException(
"Unable to instantiate instrumentation "
@@ -6234,8 +6224,8 @@ public final class ActivityThread {
try {
final java.lang.ClassLoader cl = c.getClassLoader();
- localProvider = instantiate(cl, info.name, context,
- Application::instantiateProvider);
+ localProvider = (ContentProvider)cl.
+ loadClass(info.name).newInstance();
provider = localProvider.getIContentProvider();
if (provider == null) {
Slog.e(TAG, "Failed to instantiate class " +
@@ -6434,49 +6424,6 @@ public final class ActivityThread {
}
}
- private <T> T instantiate(ClassLoader cl, String className, Context c,
- Instantiator<T> instantiator)
- throws ClassNotFoundException, IllegalAccessException, InstantiationException {
- Application app = getApp(c);
- if (app != null) {
- T a = instantiator.instantiate(app, cl, className);
- if (a != null) return a;
- }
- return (T) cl.loadClass(className).newInstance();
- }
-
- private <T> T instantiate(ClassLoader cl, String className, Intent intent, Context c,
- IntentInstantiator<T> instantiator)
- throws ClassNotFoundException, IllegalAccessException, InstantiationException {
- Application app = getApp(c);
- if (app != null) {
- T a = instantiator.instantiate(app, cl, className, intent);
- if (a != null) return a;
- }
- return (T) cl.loadClass(className).newInstance();
- }
-
- private Application getApp(Context c) {
- // We need this shortcut to avoid actually calling getApplicationContext() on an Application
- // because the Application may not return itself for getApplicationContext() because the
- // API doesn't enforce it.
- if (c instanceof Application) return (Application) c;
- if (c.getApplicationContext() instanceof Application) {
- return (Application) c.getApplicationContext();
- }
- return null;
- }
-
- private interface Instantiator<T> {
- T instantiate(Application app, ClassLoader cl, String className)
- throws ClassNotFoundException, IllegalAccessException, InstantiationException;
- }
-
- private interface IntentInstantiator<T> {
- T instantiate(Application app, ClassLoader cl, String className, Intent intent)
- throws ClassNotFoundException, IllegalAccessException, InstantiationException;
- }
-
private static class EventLoggingReporter implements EventLogger.Reporter {
@Override
public void report (int code, Object... list) {
diff --git a/core/java/android/app/Application.java b/core/java/android/app/Application.java
index cc23ec9023b6..156df36a600c 100644
--- a/core/java/android/app/Application.java
+++ b/core/java/android/app/Application.java
@@ -16,20 +16,17 @@
package android.app;
+import java.util.ArrayList;
+
import android.annotation.CallSuper;
-import android.app.backup.BackupAgent;
-import android.content.BroadcastReceiver;
import android.content.ComponentCallbacks;
import android.content.ComponentCallbacks2;
-import android.content.ContentProvider;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
-import java.util.ArrayList;
-
/**
* Base class for maintaining global application state. You can provide your own
* implementation by creating a subclass and specifying the fully-qualified name
@@ -292,73 +289,4 @@ public class Application extends ContextWrapper implements ComponentCallbacks2 {
}
}
}
-
- /**
- * Allows application to override the creation of activities. This can be used to
- * perform things such as dependency injection or class loader changes to these
- * classes. Return null to use the default creation flow.
- * @param cl The default classloader to use for instantiation.
- * @param className The class to be instantiated.
- * @param intent Intent creating the class.
- */
- public Activity instantiateActivity(ClassLoader cl, String className, Intent intent) {
- return null;
- }
-
- /**
- * Allows application to override the creation of receivers. This can be used to
- * perform things such as dependency injection or class loader changes to these
- * classes. Return null to use the default creation flow.
- * @param cl The default classloader to use for instantiation.
- * @param className The class to be instantiated.
- * @param intent Intent creating the class.
- */
- public BroadcastReceiver instantiateReceiver(ClassLoader cl, String className, Intent intent) {
- return null;
- }
-
- /**
- * Allows application to override the creation of services. This can be used to
- * perform things such as dependency injection or class loader changes to these
- * classes. Return null to use the default creation flow.
- * @param cl The default classloader to use for instantiation.
- * @param className The class to be instantiated.
- * @param intent Intent creating the class.
- */
- public Service instantiateService(ClassLoader cl, String className, Intent intent) {
- return null;
- }
-
- /**
- * Allows application to override the creation of providers. This can be used to
- * perform things such as dependency injection or class loader changes to these
- * classes. Return null to use the default creation flow.
- * @param cl The default classloader to use for instantiation.
- * @param className The class to be instantiated.
- */
- public ContentProvider instantiateProvider(ClassLoader cl, String className) {
- return null;
- }
-
- /**
- * Allows application to override the creation of backup agents. This can be used to
- * perform things such as dependency injection or class loader changes to these
- * classes. Return null to use the default creation flow.
- * @param cl The default classloader to use for instantiation.
- * @param className The class to be instantiated.
- */
- public BackupAgent instantiateBackupAgent(ClassLoader cl, String className) {
- return null;
- }
-
- /**
- * Allows application to override the creation of instrumentation. This can be used to
- * perform things such as dependency injection or class loader changes to these
- * classes. Return null to use the default creation flow.
- * @param cl The default classloader to use for instantiation.
- * @param className The class to be instantiated.
- */
- public Instrumentation instantiateInstrumentation(ClassLoader cl, String className) {
- return null;
- }
} \ No newline at end of file