为什么Activity中的onCreate()受到保护?

时间:2011-04-13 16:42:12

标签: android android-activity

为什么Activity中的onCreate()受到保护?

或者我应该问:它为什么有用?

受保护的方法只能在类本身的内部或它的后代中调用。所以Android系统不能像“act.onCreate()”那样调用它。那么......怎么称呼呢?

BTW,为什么OnClickListener中的onClick()是公开的?有什么不同?

4 个答案:

答案 0 :(得分:7)

使用公共onClick方法非常有用,因为您可以“强制”某些按钮以编程方式单击。一个常见的例子是当用户按下回车键或按下提交按钮时,使代码执行。

我认为Android不直接调用Activity.onCreate。请注意,Activity继承自Context(does have a public constructor)。我的理解是构造函数触发了一些事件,并且onCreate / Pause / Resume / Destroy方法在适当的时候在内部调用。

例如,在创建活动时,必须解析和扩充视图XML文件。这是自动发生的,因此幕后发生的事情是你无法直接控制的。

答案 1 :(得分:7)

onCeate()受到保护,以避免从活动对象中调用它。

MyActivity activity = new MyActivity();
activity.onCreate(args);  // which doesn't make sense because activity is not yet created

由于此方法仅在创建活动时调用,因此自行调用它很可能会为您提供 nullpointerException ,因为尚未创建活动。

答案 2 :(得分:2)

onCreate不公开,因为您不希望在完全不同的包中创建活动的随机类。

如果我在com.abccompany.activity包中设计一个Activity类,并且我的一个同事在com.abccompany.jsonparser包中设计了一个JSON数据解析类,我不希望他创建我的活动和随时显示他的JSON数据。

onCreate不是私有的,因为您确实想要子类化Activity,然后对子类使用super Activity onCreate方法。

实际上你设计的每个Activity都扩展了android.app.Activity,所以如果onCreate在那个超类中是私有的,那么你就根本无法调用onCreate。

答案 3 :(得分:0)

你为什么要关心onCreate受到保护?受保护是因为逻辑上不应该被与活动不同的其他类访问。 Android如何启动活动?有很多方法可以做到这一点,特别是如果您是设计框架的人,解决方案可能是在构造函数上调用(一种可能性)o通过其他机制调用,例如具有适当特权的反射等。

onClick是公开的,因为它可以由外部类设置或处理,而不是您的Activity。我的意思是,A类可以处理Activity的onClick事件。