子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) {
}
}
天蓬老师2017-04-18 09:08:34
객체 지향에서 하위 클래스는 상위 클래스의 동작 속성을 상속하므로 하위 클래스는 onCreate(...) 함수를 재정의할 필요가 없습니다.
존경하는 마음을 담아 두 권의 좋은 책을 추천하고 싶습니다.
O'Reilly: Head First Java(Java5.0을 다루는 중국어 버전 2판)
Java 프로그래밍 생각(4판)(Thinking in Java)
ringa_lee2017-04-18 09:08:34
공유하신 소스 코드에 따르면 oncrate는 상위 클래스인 BaseActivity에서 추상화되지 않으므로 당연히 호출할 필요가 없지만 하위 클래스에서도 이를 다시 작성할 수 있습니다. 기본적으로 이 메서드의 원리는 더욱 간단합니다.
Java 가상 머신이 프로그램을 실행하면 부모 클래스가 먼저 실행되므로 처음에는 부모 클래스의 Oncreate 메서드가 실행되고 그 다음에는 하위 클래스의 추상 메소드는 상위 클래스에서 실행되지 않으므로 하위 클래스가 실행될 때 이러한 메소드가 실행됩니다.