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

子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(Java5.0을 다루는 중국어 버전 2판)

  2. Java 프로그래밍 생각(4판)(Thinking in Java)

左手右手慢动作

공유하신 소스 코드에 따르면 oncrate는 상위 클래스인 BaseActivity에서 추상화되지 않으므로 당연히 호출할 필요가 없지만 하위 클래스에서도 이를 다시 작성할 수 있습니다. 기본적으로 이 메서드의 원리는 더욱 간단합니다.
Java 가상 머신이 프로그램을 실행하면 부모 클래스가 먼저 실행되므로 처음에는 부모 클래스의 Oncreate 메서드가 실행되고 그 다음에는 하위 클래스의 추상 메소드는 상위 클래스에서 실행되지 않으므로 하위 클래스가 실행될 때 이러한 메소드가 실행됩니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿