子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) {
}
}
En orienté objet, les sous-classes hériteront des attributs comportementaux de la classe parent. Par conséquent, la sous-classe n'a pas besoin de remplacer la fonction onCreate(...).
Avec tout le respect que je vous dois, je voudrais vous recommander deux bons livres :
O'Reilly : Head First Java (version chinoise 2e édition couvrant Java5.0)
Réflexions sur la programmation Java (4e édition) (Penser en Java)
À en juger par le code source que vous avez partagé, oncrate n'est pas abstrait dans votre classe parent, BaseActivity, donc bien sûr il n'a pas besoin d'être appelé, mais les sous-classes peuvent également le réécrire. Quant à la subActivity, elle sera appelée par. par défaut. Le principe de cette méthode est encore plus simple :
Lorsque la machine virtuelle Java exécute un programme, la classe parent sera exécutée en premier, donc la méthode Oncreate de la classe parent sera exécutée au début, puis l'abstraite. les méthodes de la sous-classe seront exécutées dans la classe parent n'ont pas été appelées, donc lorsque la sous-classe est exécutée, ces méthodes sont exécutées !