diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/ActivityThread.java | 75 | ||||
| -rw-r--r-- | core/java/android/app/Application.java | 76 |
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 |
