Intereting Posts
FindFragmentByTag null для фрагмента A, если setRetain (true) на фрагменте B Как сделать вид в андроиде с закругленными углами Возврат ключевого события в EditText Как обнаружить Android ListView Scrolling остановлено? InDict Усталость в android N В Java, как вы проверяете, является ли переменная float пустой? Запись видео с другим размером предварительного просмотра, чем полученный видеофайл Обеспечение связи с мобильным приложением? Анимация по обнаружению объектов для Android ViewFlipper имеет «огромную» задержку Работа с Android / Robolectric – активированная активность возвращает null на getResource Как получить статус сообщения для чтения / непрочтения с помощью XMPP Smack API? ViewPagers в ListView, показывающий элементы пустого списка Перечислите активность с помощью заголовка, нижнего колонтитула и опустошите все видимые Как открыть приложение для Android, если оно установлено, и перейти на рынок Android, если не установить

Как создается действие Android (используя отражение)?

Об этом сегодня в интервью для Android. Я ответил обычным, вы знаете, намерение + startActivity и т. Д. Затем собеседник спросил более остро,

«Да, но где он фактически создан ? Вы не называете новую деятельность нигде».

Что теперь, когда я думаю об этом, я действительно не знаю. Он намекнул, что использует отражение Java, но у меня нет большого опыта с этим, и я использовал его только для доступа к некоторым переменным в Android SDK.

Может ли кто-нибудь объяснить, как действия создаются с использованием рефлексии и почему ? Бонусные баллы за понимание того, какое значение дал интервьюер, зная это.

Solutions Collecting From Web of "Как создается действие Android (используя отражение)?"

Когда на главном экране щелкнет значок запуска приложения, в системе Android появится следующее событие:

  • Приложение Homescreen / Launcher отправляет намерение начать работу с использованием функции startActivity () (startActivity () – это вызов связующего агента в ActivityManager)
  • Менеджер активности отправляет запрос fork процесса, используя сокет для Zygote.
  • Zygote открывает новый экземпляр виртуальной машины, который загружает ActivityThread (поток активности управляет выполнением основного потока в процессе приложения, планирования и выполнения действий, трансляций и других операций над ним, как запросит менеджер активности).
  • ActivityThread имеет реальный main () для приложения.
  • ActivityThread вызывает onCreate ().

Следовательно ActivityThread несет ответственность за создание экземпляра Activity (внутри метода performLaunchActivity)

Объяснение:

Если вы наблюдаете stacktrace:

android.app.Instrumentation.newActivity(Instrumentation.java:1021) android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 

Код, в котором создается новая активность:

 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; } 

Instrumentation.java (класс будет создан для вас перед любым кодом приложения)

 public Activity newActivity(ClassLoader cl, String className, Intent intent) throws InstantiationException, IllegalAccessException, ClassNotFoundException { return (Activity)cl.loadClass(className).newInstance(); } 

Простой способ проверить путь к методу конструктора – создать временный проект, переопределить конструктор в своей Activity и разместить там точку останова.

Вы должны пройти весь код и найти то, что именно хотите.

Введите описание изображения здесь

До тех пор, пока вы не находитесь в интервью разработчику системы Android (хакер ядра, …), ответ просто: это часть реализации платформы Android, которую нормальный разработчик Android не должен заботиться из-за абстракции И принцип слоя, и его можно найти в редком случае, вам действительно нужно это знать.

Ядро Android отвечает за управление созданием действия и управление его жизненным циклом своей деятельности.

Система android заботится о том, чтобы вызывать все события, которые вы можете контролировать в своем классе, в правильном порядке, добавлять активность в стек и многое другое.

Когда вы вызываете startActivity, ядро ​​Android принимает управление и делает экземпляр действия (или повторно использует предыдущий, если соответствует) и начинает вызывать события жизненного цикла активности

Вы можете увидеть его здесь: http://developer.android.com/reference/android/app/Activity.html в разделе «Деятельность Lifecycle»