Конструктор подкласса приложения Android не вызывается

#android #constructor #android-manifest

#Android #constructor #android-манифест

Вопрос:

В моем приложении для Android есть класс, который подклассирует объект AndroidApplication. В документах говорится:

public void onCreate ()

Поскольку: API уровня 1 вызывается при запуске приложения, до создания любых других объектов приложения. Реализации должны быть как можно более быстрыми (например, с использованием отложенной инициализации состояния), поскольку время, затрачиваемое на выполнение этой функции, напрямую влияет на производительность запуска первого действия, службы или получателя в процессе. Если вы переопределите этот метод, обязательно

вызовите super.onCreate().

Я установил точку останова в конструкторе моего подкласса, и когда я запускаю свое приложение, она никогда не достигается. Естественно, когда я вызываю метод getInstance() подкласса из другого кода, он возвращает NULL, поскольку переменная экземпляра (должна быть) инициализирована при вызове конструктора.

Кто-нибудь может сказать мне, что не так? Я бы предположил из документов, что мне не нужно самому создавать экземпляр подкласса AndroidApplication, или я должен? Должен ли я каким-то образом изменить свой файл манифеста, чтобы добавить подкласс AndroidApplication, и если да, то каким образом?

— roschler

Комментарии:

1. Не могли бы вы показать свой код?

2. Также вы объявили свой класс приложения в манифесте?

Ответ №1:

Я публикую ответ здесь для других. Да, вам нужно добавить имя подкласса объекта вашего приложения в манифест Android. Для пользователей Eclipse самый простой способ сделать это — открыть AndroidManifest.xml файл, выберите вкладку приложения в редакторе манифеста и используйте кнопку Обзор рядом с полем Имя, чтобы найти имя подкласса объекта приложения Android и выбрать его. Файл манифеста будет обновлен надлежащим образом для его регистрации. Я просто сделал это, и это сработало.

Комментарии:

1. Миллион благодарностей! Благодаря этому я заметил, что случайно поместил name= «MyApp» вместо android: name=»MyApp» в манифест, и мне было интересно, почему мой конструктор никогда не вызывался…

Ответ №2:

У меня была проблема с отсутствием . перед именем класса моего приложения. Должно быть: android:name=».MyApp»

поскольку класс MyApp находится в пакете, определенном в манифесте.