찾다

 >  Q&A  >  본문

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일 전709

모든 응답(2)나는 대답할 것이다

  • 天蓬老师

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

    객체 지향에서 하위 클래스는 상위 클래스의 동작 속성을 상속하므로 하위 클래스는 onCreate(...) 함수를 재정의할 필요가 없습니다.

    존경하는 마음을 담아 두 권의 좋은 책을 추천하고 싶습니다.

    1. O'Reilly: Head First Java(Java5.0을 다루는 중국어 버전 2판)

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

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-18 09:08:34

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

    회신하다
    0
  • 취소회신하다