为什么Activity中的onCreate()受到保护?
或者我应该问:它为什么有用?
受保护的方法只能在类本身的内部或它的后代中调用。所以Android系统不能像“act.onCreate()”那样调用它。那么......怎么称呼呢?
BTW,为什么OnClickListener中的onClick()是公开的?有什么不同?
答案 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事件。