12

我有自己的基础抽象类,它扩展了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文件中注册,我没有收到任何错误。

这是一个定时炸弹(不在 Manifest 中注册基类)还是应该这样?有人可以解释为什么吗?

4

3 回答 3

17

您不需要在清单中注册BaseActivity类,因为它不是您在意图启动时调用的类。

例如:

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

在上面的代码中,您需要Activity1在清单中注册活动,因为您是在意图中提及它,而不是BaseActivity类中。

于 2012-05-18T13:08:57.833 回答
16

根据文档,<activity>清单上的:

声明一个实现应用程序可视用户界面的一部分的活动(一个活动子类)。所有活动都必须由清单文件中的元素表示。任何 未在此处声明的内容都不会被系统看到并且永远不会 运行

可以这样想:如果有一个活动(任何扩展Activity的类或扩展它的类)您将在应用程序的某个位置导航到,则需要在清单中声明它。无论您如何达到该活动。这不包括仅扩展Activity类但您无法直接访问的类。

来源

于 2012-05-18T13:07:38.857 回答
0

No need to register Base class in manifest because it is an abstract class , we cannot make an object of Abstract class, we can define only its methods and declaration.

于 2018-07-24T05:29:17.970 回答