2012-05-18 21 views
11

我有我自己的基类抽象类,它扩展了Activity类。无需在Manifest中注册基础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中注册基类)或者这是应该的方式?有人能解释为什么吗?

回答

15

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

声明实现的 应用程序的可视化用户界面一部分的活性(一个活动子类)。所有活动必须由清单文件中的元素表示的 。 任何都是 没有宣布将不会被系统看到,将永远不会 运行

想想看这样的:如果有一个活动(扩展Activity任何类或继承它的类),您将浏览到应用程序中的某个时刻,它需要在清单中声明。不管您如何达到该活动。这不包括仅扩展Activity类的类,但无法直接访问。

Source

+0

您的答案有点误导。你说它的时间炸弹不是在清单中注册BaseActivity,但你继续说不注册它 – dymmeh

+0

不用担心。感谢澄清:) – dymmeh

10

不要需要注册BaseActivity类清单中,因为它不是你的意图调用一个推出。

例如:

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

在上面的代码中,你需要有Activity1活动登记清单中,因为你是在故意提的是,BaseActivity类。

+1

^这。除非您计划实际运行BaseActivity,您只需注册正在扩展它的活动。 – dymmeh

+0

是的,当然...逻辑*具体*类应该注册。 – waqaslam

+0

任何投票的理由? – waqaslam