2011-10-04 3 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); 
    } 
} 

시도를 통해이 작업을 수행 할 수 생성자 전에 데이터베이스 세부 사항을 선언 다음 코드

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

쓰기 이것은 ... 도움이 될 수도 있습니다

+0

@Kartik 내가 제안한 것처럼 전체 스플래시 수업을 편집했습니다. 맞습니까? –

+0

예, 작동합니다. ur fromcreate function new MyTask(). execute (this); – Andy

0

스레드에서 데이터베이스를로드하고 한 번 처리기를 사용하여 다음 화면으로 이동합니다. android .search 핸들러 및 스레드 용 핸들러 클래스를 사용하면 많은 솔루션을 얻을 수 있습니다.

2

활동을 호출하고, SplashScreen으로 호출 할 수 있습니다. AsyncTask을 호출하여 귀하가 만든 다른 클래스에 액세스하는이 액티비티에서 SQLiteOpenHelper을 확장하십시오. 이 클래스는 데이터베이스를 초기화합니다.
이 AsyncTask가 작동을 끝내면 컨트롤이 UI 스레드로 반환되고 SplashScreen이 닫힙니다. 되는 SplashScreen의 당신의에서 onCreate에서

+0

데모는 여기에 있습니다. 체크 아웃 : http://stackoverflow.com/questions/2222890/how-to-make-a-splash-screen-screen-visible-when-app-starts –

-1

+0

이것은 UI 스레드에서 초기화를 수행합니다. 몇 초보다 오래 걸리면 응용 프로그램이 응답하지 않습니다. AsyncTask를 대신 사용해보십시오. –

관련 문제