子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 stub
super.onResume();
// StatService.onPause(mContext);
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
// StatService.onResume(mContext);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.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) {
}
}
面向对象中, 子类会继承父类的行为属性. 所以, 子类可以不需要重写onCreate(...)函数.
恕我冒昧, 推荐给你两本好书:
O'Reilly:Head First Java(中文版 第2版 涵盖Java5.0)
Java编程思想(第4版)(Thinking in Java)
从你分享的源码中来看,你的父类,BaseActivity中oncrate并没有抽象出来,所以当然不是需要要调用的,但是子类也可以对他进行重写,至于子Activity会默认调用该方法的原理就更简单了:
在java虚拟机执行程序时,顺序会优先执行父类,所以一开始就会执行父类的Oncreate方法,然后子类中被抽象的方法在父类中都没被调用,所以执行到子类的时候,这些方法都是被被执行的!