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

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

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

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

répondre à tous(2)
Peter_Zhu

En orienté objet, les sous-classes hériteront des attributs comportementaux de la classe parent. Par conséquent, la sous-classe n'a pas besoin de remplacer la fonction onCreate(...).

Avec tout le respect que je vous dois, je voudrais vous recommander deux bons livres :

  1. O'Reilly : Head First Java (version chinoise 2e édition couvrant Java5.0)

  2. Réflexions sur la programmation Java (4e édition) (Penser en Java)

左手右手慢动作

À en juger par le code source que vous avez partagé, oncrate n'est pas abstrait dans votre classe parent, BaseActivity, donc bien sûr il n'a pas besoin d'être appelé, mais les sous-classes peuvent également le réécrire. Quant à la subActivity, elle sera appelée par. par défaut. Le principe de cette méthode est encore plus simple :
Lorsque la machine virtuelle Java exécute un programme, la classe parent sera exécutée en premier, donc la méthode Oncreate de la classe parent sera exécutée au début, puis l'abstraite. les méthodes de la sous-classe seront exécutées dans la classe parent n'ont pas été appelées, donc lorsque la sous-classe est exécutée, ces méthodes sont exécutées !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal