Quando un'icona di avvio di un'applicazione viene cliccato homescreen, a seguito di evento si verifica con il sistema Android:
- homescreen/Launcher applicazione invia una t intento o avviare un'attività utilizzando startActivity() (startActivity() è la chiamata di binder a ActivityManager)
- Activity Manager invia una richiesta di fork di processo utilizzando un socket a Zygote.
- Zygote forca una nuova istanza VM che carica ActivityThread (il thread Attività gestisce l'esecuzione del thread principale in un processo di applicazione, pianifica ed esegue attività, trasmissioni e altre operazioni su di esso mentre le richieste del gestore attività.).
- ActivityThread ha reale main() per un'app.
- ActivityThread chiama l'app suCreate().
Quindi ActivityThread è responsabile per istanziare attività (all'interno metodo performLaunchActivity)
Spiegazione:
Se si osserva la stacktrace:
android.app.Instrumentation.newActivity(Instrumentation.java:1021)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
codice in cui le nuove l'attività è istanziata :
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
... //More code
Activity activity = null;
try {
java.lang.ClassLoader cl = r.packageInfo.getClassLoader();
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
StrictMode.incrementExpectedActivityCount(activity.getClass());
r.intent.setExtrasClassLoader(cl);
r.intent.prepareToEnterProcess();
if (r.state != null) {
r.state.setClassLoader(cl);
}
} catch (Exception e) {
if (!mInstrumentation.onException(activity, e)) {
throw new RuntimeException(
"Unable to instantiate activity " + component
+ ": " + e.toString(), e);
}
}
... //More code
return activity;
}
Strumentazione.java (classe sarà un'istanza per voi prima di qualsiasi del codice dell'applicazione)
public Activity newActivity(ClassLoader cl, String className,
Intent intent)
throws InstantiationException, IllegalAccessException,
ClassNotFoundException {
return (Activity)cl.loadClass(className).newInstance();
}
Penso che il valore per l'intervistatore sia che può vedere che non solo è possibile utilizzare il framework, ma anche avere interesse sul perché e dove tutto accade. Ma anche se non l'hai ancora controllato, la tua reazione a domande così inaspettate mostra all'intervistatore come puoi far fronte a situazioni inaspettate e quanto velocemente riesci a trovare una possibile risposta. – abbath