2013-08-30 3 views
8

У меня возникли проблемы с применением концепции наследования для Android-деятельности - например. ActivityA extends Activity и ActivityB extends ActivityA, тогда, если я запускаю с ActivityB, тогда метод onCreate() для и Вызывается деятельность (A тогда B).Наследование между действиями в Android

Мой вопрос в типичной Java, onCreate from ActvityA должен быть перегружен - но onCreate скорее ведет себя как конструктор, хотя его функция. Как работает наследование в Android, особенно. wrt другие функции, такие как onPause(), onResume и т. д.?

EDIT: Я также заметил, что ActivityA может иметь много абстрактных методов, называемых в onCreate(), определения которых представлены в ActivityB. Как это работает ?

+0

да можно –

+0

'esp. wrt другие функции состояния? 'пожалуйста, определите это предложение. Я не понимаю. –

+0

+1 для приятный вопрос. !! – MKJParekh

ответ

6

Если у вас есть базовая активность, а затем продлить его, как так Activity ->Activity A это означает, что, когда ваш OnCreate из Activity A называется, и вы называете super.onCreate(); то onCreate() метод оригинального Activity также называется.

Если вы затем продлить Activity A в Activity B звонки работают как так ...

Activity B.onCreate() - super.onCreate(); ->Activity A.onCreate() - super.onCreate() ->Activity.onCreate().

Его не конструктор, его метод, который вызвал для создания Activities. Если вы затем продлеваете их с другого Activities, его суперкласс будет вызываться через его метод super. Это не значит, что создаваемые вами Activities будут унаследованы. Activity B будет вашим твоим Activity.

EDIT:This page на веб-сайте разработчика Android очень полезен, так как он визуально объясняет жизненный цикл Android-активности.

+1

Я также хотел бы отметить, что причиной того, что 'onCreate' является вместо конструктора, является то, что при изменении ориентации объект не должен восстанавливаться. –

+0

ahh .. как я пропустил super.onCreate() спасибо много, и вы могли бы также объяснить, как работают абстрактные методы (я отредактировал вопрос) – AndroidLearnMachine

+0

@AndroidLearnMachine, о каких методах вы говорите? – StuStirling

1

Да как типичная функция java onCreate должна была быть унаследована, но она не получает: почему? - потому что это не просто метод, это этап жизненного цикла.

AFAIK Деятельность - это не просто класс Java, но это особый тип JAVA-класса, у которого есть свой жизненный цикл, а этапы жизненного цикла предназначены для вызова каждый раз, когда вы используете этот класс/активность, даже если вы объявили или нет те методы onCreate(), onPause() и т. д.

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

Если у вас есть проблемы с этим, вы можете попробовать использовать абстрактные классы, интерфейсы и любой другой открытый класс, чтобы иметь общий код, унаследованный во всех ваших действиях.