如何在初始化数据库时显示启动画面?

4

我已经创建了一个闪屏界面,它运行得非常完美。现在我想在显示闪屏界面的同时加载数据库,等数据库完全加载完成后再显示应用程序界面。
我有以下代码来实现这个功能,这样做是正确的吗?

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); 
    }
}

有没有好的例子或建议?请帮我解决这个问题。


我找到了有关UI线程和后台处理的教程Processing。并参考了这个答案 - Uttam
4个回答

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); 
     } 
} 

试试这个...也许会对你有帮助


@Kartik,我已经按照你的建议编辑了整个启动类,这样正确吗? - aman.nepid
是的,它会起作用,只需从您的onCreate函数中调用此代码:new MyTask().execute(this); - Andy

2

调用一个活动,我们称之为SplashScreen。从该活动中调用一个AsyncTask,该任务访问您创建的另一个类,该类扩展了SQLiteOpenHelper。该类初始化数据库。
当此AsyncTask完成工作时,将控制权返回到UI线程,现在关闭SplashScreen。


它的演示在SO这里。请查看:https://dev59.com/6nE95IYBdhLWcg3wn_f2 - Kartik Domadiya

0

在一个线程中加载数据库,完成后使用Handler跳转到下一个屏幕,在Android中使用Handler类。搜索Handler和Thread,你会得到很多解决方案。


-1
在SplashScreen的onCreate中编写以下代码。
    myDataBase=this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
    DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
    dbHelper.openDataBase();

在构造函数之前声明您的数据库细节


这将在UI线程上进行初始化,如果它花费的时间超过几秒钟,可能会使您的应用程序无响应。考虑改用AsyncTask。 - Yohan Liyanage

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接