Нет необходимости регистрировать базовый класс активности в манифесте?

У меня есть собственный базовый абстрактный класс, который расширяет класс Activity.

public abstract class BaseActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResourceId());
    }

    protected abstract int getLayoutResourceId();
}

public class Activity1 extends BaseActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // do extra stuff 
    }

    @Override
    protected int getLayoutResourceId() {
        return R.layout.layout_for_activity1;
    }
}

Мой базовый класс BaseActivity не зарегистрирован в файле Manifest и я не получаю никаких ошибок.

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

Ответ 1

Согласно документам, <activity> в манифесте:

Объявляет действие (подкласс Activity), который реализует часть визуального пользовательского интерфейса приложения. Все действия должны быть представлены элементами в файле манифеста. Любые, которые не объявлены там, не будут видны системе и никогда не будут запущены.

Подумайте об этом так: Если деятельность (любой класс, который расширяет Activity или класс, который расширяет его), что вы будете перемещаться в какой - то момент в приложении, оно должно быть объявлено в манифесте. Независимо от того, как вы достигнете этой активности. Это исключает классы, которые расширяют только класс Activity но вы не можете связаться напрямую.

Источник

Ответ 2

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

например:

Intent i = new Intent(context, Activity1.class);
startActivity(i);

В приведенном выше коде вам нужно, чтобы Activity1 зарегистрировалась в манифесте, потому что вы упоминаете ее в намерении, а не в классе BaseActivity.

Ответ 3

Не нужно регистрировать базовый класс в манифесте, потому что это абстрактный класс, мы не можем создать объект абстрактного класса, мы можем определить только его методы и декларации.