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

子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(...) 関数をオーバーライドする必要はありません。

敬意を表して、あなたに 2 冊の良い本をお勧めしたいと思います:

  1. O'Reilly: Head First Java (Java5.0 をカバーする中国語版第 2 版)

  2. Java プログラミング思考 (第 4 版) (Java で考える)

いいねを押す +0
左手右手慢动作

共有していただいたソースコードを見ると、oncrate は親クラスの BaseActivity 内で抽象化されていないので、もちろん呼び出す必要はありませんが、サブクラスからも書き換えることができ、subActivity に関しては呼び出されることになります。デフォルトでは、このメソッドの原理はさらに単純です。
Java 仮想マシンがプログラムを実行すると、最初に親クラスが実行されるため、親クラスの Oncreate メソッドが最初に実行され、次に親クラスが実行されます。サブクラス内の抽象化されたメソッドは親クラスで呼び出されないため、サブクラスが実行されると、これらのメソッドが実行されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート