当按下后退按钮时,为什么要调用onCreate?

时间:2014-08-19 21:34:48

标签: android

我在一年多的时间里没有触及Android上的开发,我之前对此并不是很满意。

但是,我正在开发一个应用程序,我有三个活动--A,B和C. A基本上用作启动画面,并调用B初始化带有填充数据的数据库,然后A调用C ,这是主屏幕。所以活动流程如下(足够简单):

A - > B,然后C

我的问题是我的数据库没有被初始化,直到我退出活动C,这基本上只是结束整个应用程序。我注意到当时调用onCreate for B,我无法弄清楚为什么在那时调用它而不是A启动活动B.

这是我到目前为止所拥有的。此外,我在大多数情况下都在使用本教程作为我的数据库。不确定它是否有所作为,但供参考:http://www.androidhive.info/2011/11/android-sqlite-database-tutorial/

活动A(SplashScreen)

public void onCreate(Bundle saveInstanceState) { 
    super.onCreate(saveInstanceState);
    setContentView(R.layout.splash_layout);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    mHandler = new Handler();
    mRunnable = new Runnable() {
        public void run() {
            // Initialize the database on startup
            Intent initDB = new Intent(SplashScreen.this, DBInit.class);
            SplashScreen.this.startActivity(initDB);

            // Then load up the main activity
            Intent mainIntent = new Intent(SplashScreen.this, MainActivity.class);
            SplashScreen.this.startActivity(mainIntent);
            SplashScreen.this.finish();
            overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
        }
    };
    mHandler.postDelayed(mRunnable, 2000);  
}

活动B(DBInit)

public void onCreate(Bundle savedInstanceState) {
    // Database initialization stuff
    DBInit.this.finish();
}

1 个答案:

答案 0 :(得分:0)

我发现使用AsyncTask是更简单,更清洁的方法。使用此SO问题/主题作为解决方案:How to show splash screen while initializing database?

我会继续并发布我的解决方案,但现在它是一堆乱七八糟的代码,我还有一个我需要解决的问题。