子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) {
}
}
Dalam berorientasikan objek, subkelas akan mewarisi atribut tingkah laku kelas induk Oleh itu, subkelas tidak perlu mengatasi fungsi onCreate(...).
Dengan segala hormatnya, saya ingin mengesyorkan dua buku yang bagus kepada anda:
O'Reilly: Head First Java (versi Cina edisi ke-2 meliputi Java5.0)
Pemikiran Pengaturcaraan Java (Edisi Ke-4) (Berfikir dalam Java)
Berdasarkan kod sumber yang anda kongsi, oncrate tidak diabstrakkan dalam kelas induk anda, BaseActivity, jadi sudah tentu ia tidak perlu dipanggil, tetapi subkelas juga boleh menulis semula untuk subActivity, ia akan dipanggil oleh lalai. Prinsip kaedah ini lebih Mudah sahaja:
Apabila mesin maya Java melaksanakan program, kelas induk akan dilaksanakan terlebih dahulu, jadi kaedah Oncreate kelas induk akan dilaksanakan pada permulaan, dan kemudian kaedah abstrak dalam subkelas tidak akan dipanggil dalam kelas induk Jadi apabila melaksanakan kepada subkelas, kaedah ini dilaksanakan!