2011-10-04 85 views
3

我創建了一個完美的啓動畫面。現在我想要在顯示啓動畫面的同時加載數據庫,並且在數據庫加載完後顯示應用程序UI。
我有下面的代碼來做到這一點是正確的?
如何在初始化數據庫時顯示啓動畫面?

public class Splash extends Activity{ 

@Override 
protected void onCreate(Bundle bundle) { 
    super.onCreate(bundle); 
    new LoadDatabase().execute(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    finish(); 
} 

// Load DB 
protected class LoadDatabase extends AsyncTask<Context, Integer, String> 
{ 
    @Override 
    protected String doInBackground(Context... params) { 
     try { 
      new DatabaseHelper(getApplicationContext()).initializeDatabase(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return ""; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     setContentView(R.layout.splash); 
    } 

    @Override 
    protected void onPostExecute(String result) {   
     super.onPostExecute(result); 
     Intent openMain = new Intent("com.nepways.MAIN"); 
     startActivity(openMain); 
    } 
} 

}


有沒有什麼好的例子或建議?這個你能幫我嗎。

+0

我發現教程UI THRE廣告和背景[處理](http://www.vogella.de/articles/AndroidPerformance/article.html#overview_intro)。 並且是指該[答案](http://stackoverflow.com/questions/1979524/android-splashscreen/1982002#1982002)。 – Uttam

回答

3

您可以通過異步或線程和處理器

protected class MyTask extends AsyncTask<Context, Integer, String> 
{ 
    @Override 
    protected String doInBackground(Context... params) 
    { 
     // write ur database functionality 
    } 

    // -- gets called just before thread begins 
    @Override 
    protected void onPreExecute() 
    { 
     // u may show ur progressbar or spalsh screen 
     super.onPreExecute(); 

    } 


    // -- called as soon as doInBackground method completes 
    @Override 
    protected void onPostExecute() 
    { 
     super.onPostExecute(result); 
     // Intent openMain = new Intent("com.nepways.MAIN"); 
      startActivity(openMain); 
    } 
} 

嘗試執行此操作這個......可能是它會幫助ü

+0

@Kartik我已經編輯了我的整個飛濺類,因爲你有建議,是嗎? –

+0

是的,它會工作,只需從你的oncreate函數new MyTask()調用這個函數。execute(this); – Andy

0

負載在一個線程中的數據基礎和做一次進入下一個畫面使用處理器,使用處理器類爲Android .search處理程序和線程,你會得到很多的解決方案。

2

調用的活動,讓我們把它叫做閃屏。從此活動中調用AsyncTask,以訪問由您創建的另一個課程,從而延伸SQLiteOpenHelper。這個類初始化數據庫。
當此的AsyncTask工作完畢,它返回控制UI線程,現在關閉了閃屏。

+0

它的演示在這裏。退房:http://stackoverflow.com/questions/2222890/how-to-make-a-splash-screen-screen-visible-when-app-starts –

-1

在你的閃屏的的onCreate寫代碼如下

myDataBase=this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null); 
    DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext()); 
    dbHelper.openDataBase(); 

的構造函數之前聲明你的數據庫的詳細信息

+0

這將做UI線程的初始化,這可能使如果需要超過幾秒鐘,您的應用程序無法響應。考慮使用AsyncTask代替。 –