android中子activity是否必须重写oncreate()

浏览:35日期:2022-11-10

问题描述

子activity是否必须重写oncreate(),如果不是必须的话,子activity默认调用该方法的原理是什么。

父类Activity:

public abstract class BaseActivity extends AppCompatActivity implements View.OnClickListener { protected Context mContext; private ConnectivityManager manager; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 锁定竖屏mContext = getActivityContext();initView();ButterKnife.bind(this);initdata();MyApplication.getInstance().addActivity(this); } /** * 初始activity方法 */ private void initView() {loadViewLayout(); } private void initdata(){findViewById();setListener();processLogic(); } @Override protected void onResume() {// TODO Auto-generated method stubsuper.onResume();//StatService.onPause(mContext); } @Override protected void onPause() {// TODO Auto-generated method stubsuper.onPause();//StatService.onResume(mContext); } @Override protected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();MyApplication.getInstance().finishActivity(this); } /** * 加载页面layout */ protected abstract void loadViewLayout(); /** * 加载页面元素 */ protected abstract void findViewById(); /** * 设置各种事件的监听器 */ protected abstract void setListener(); /** * 业务逻辑处理,主要与后端交互 */ protected abstract void processLogic(); /** * Activity.this */ protected abstract Context getActivityContext();

子类 Activity:

public class WelcomeActivity extends BaseActivity { @Override protected void loadViewLayout() {setContentView(R.layout.activity_welcome); } @Override protected void findViewById() { } @Override protected void setListener() { } @Override protected void processLogic() {new Handler().postDelayed(new Runnable() { @Override public void run() {startActivity(new Intent(WelcomeActivity.this,HomeTabActivity.class));finish(); }}, 2000); } @Override protected Context getActivityContext() {return this; } @Override public void onClick(View view) { }}

问题解答

回答1:

面向对象中, 子类会继承父类的行为属性. 所以, 子类可以不需要重写onCreate(...)函数.

恕我冒昧, 推荐给你两本好书:

O’Reilly:Head First Java(中文版 第2版 涵盖Java5.0)

Java编程思想(第4版)(Thinking in Java)

回答2:

从你分享的源码中来看,你的父类,BaseActivity中oncrate并没有抽象出来,所以当然不是需要要调用的,但是子类也可以对他进行重写,至于子Activity会默认调用该方法的原理就更简单了:在java虚拟机执行程序时,顺序会优先执行父类,所以一开始就会执行父类的Oncreate方法,然后子类中被抽象的方法在父类中都没被调用,所以执行到子类的时候,这些方法都是被被执行的!

相关文章: