android中子activity是否必须重写oncreate()
大家讲道理
大家讲道理 2017-04-18 09:06:34
0
2
704

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

    }
}
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
Peter_Zhu

物件導向中, 子類別會繼承父類別的行為屬性. 所以, 子類別可以不需要重寫onCreate(...)函數.

恕我冒昧, 推薦給你兩本好書:

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

  2. Java程式設計思想(第4版)(Thinking in Java)

左手右手慢动作

從你分享的源碼中來看,你的父類,BaseActivity中oncrate並沒有抽像出來,所以當然不是需要要調用的,但是子類也可以對他進行重寫,至於子Activity會預設呼叫該方法的原理就更簡單了:
在java虛擬機執行程式時,順序會優先執行父類,所以一開始就會執行父類的Oncreate方法,然後子類中被抽象的方法在父類中都沒被調用,所以執行到子類別的時候,這些方法都是被執行的!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板