搜索

首页  >  问答  >  正文

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

子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) {

    }
}
大家讲道理大家讲道理2772 天前711

全部回复(2)我来回复

  • 天蓬老师

    天蓬老师2017-04-18 09:08:34

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

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

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

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

    回复
    0
  • ringa_lee

    ringa_lee2017-04-18 09:08:34

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

    回复
    0
  • 取消回复