Нет необходимости регистрировать базовый класс активности в манифесте?
У меня есть собственный базовый абстрактный класс, который расширяет класс 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
Не нужно регистрировать базовый класс в манифесте, потому что это абстрактный класс, мы не можем создать объект абстрактного класса, мы можем определить только его методы и декларации.