Android: какой метод выполняет события onClick для кнопок, которые определены в макетах XML.

Я пытаюсь лучше понять структуру Android, поэтому я создал простое приложение, которое на самом деле состоит всего из одной кнопки. Всякий раз, когда эта кнопка нажимается, метод с именем sendMessage в MainActivity запускает новую активность DisplayMessageActivity, которая отображает случайную строку.

Теперь мой вопрос: как, в частности, работает событие onClick кнопки (определенное в макете XML)?! Я понимаю, что всякий раз, когда я нажимаю кнопку, вызывается метод, который я определил (android:onClick="sendMessage"), но мне действительно любопытно, какой метод вызывает мой метод в конце, потому что в синтаксисе явно нет вызова моего метода .

Я уже декомпилировал свой APK-файл в smalicode с помощью androguard и искал вызовы моего метода sendMessage. К сожалению, я ничего не мог найти.

Может ли кто-нибудь объяснить мне, как работает этот механизм, потому что, согласно этому сообщению:

Чем именно XML-атрибут android:onClick отличается от setOnClickListener ?

на самом деле должен быть метод, который в конце вызывает мой метод onClick.


person user2989815    schedule 13.11.2013    source источник
comment
Метод XML, вероятно, использует отражение, поэтому в коде вы не найдете прямых вызовов.   -  person Darkhogg    schedule 14.11.2013
comment
Ну хорошо, но это значит, что есть еще метод, который выполняет вызов отражения этого метода?? (Спасибо за ответ, кстати.)   -  person user2989815    schedule 14.11.2013


Ответы (1)


Это делается путем отражения.

Если вы хотите точно знать, кто вызывает ваш метод, создайте исключение и посмотрите на трассировку стека.

person hgoebl    schedule 13.11.2013
comment
Привет, спасибо, взглянув на трассировку, я увидел, что метод Method.invoke должен вызывать мой метод кнопки. Этот класс также расширяет возможности отражения, поэтому все, что вы сказали, - правда, привет. - person user2989815; 14.11.2013