2011-10-26 8 views
2

私はSQLiteデータベースを使ってデータを格納するアプリケーションを作っています。時には、アプリケーションがデータベースにアクセスするアクティビティを切り替えるとき、特に起動されているアクティビティがonCreate()メソッドでデータベースにアクセスするときに、アプリケーションがフリーズすることがあります。Android:アプリケーション内のデータベースに非同期でアクセスする必要がありますか?

はI必要があります。

  • アクセス非同期タスクを使用して、データベースまたは類似
  • は、データベース要求を制御するためのパイプラインのいくつかの種類を使用しますか?

もし私が関連するコードサンプルを教えてもらえますか?

ありがとうございます!

答えて

3

は私がよりよい解決策を持っています。私は、このソリューションは管理しやすく、きれいで効率的です。

パイプラインの例はここにある:私は、私が作成したいかどうかと言う更新、読み取りまたは削除、合格する必要があるとして、私は、非同期タスクに更新するように値を渡すお勧めしますdはどのようにhttp://mindtherobot.com/blog/159/android-guts-intro-to-loopers-and-handlers/

4

はい、非同期アクセスを使用する必要があります。これはベストプラクティスです。 SDKには特にAsynchTaskが含まれています。私は、彼らが掲載された順序で実行されますパイプラインに掲載されているランナブルを持つパイプラインシステムを、使用しています

BuyAsyncTask extends AsyncTask<Item, Void, Item> { 
    @Override 
    protected Item doInBackground(Item... params) { 
     ..use DB here 
    } 

    @Override 
    protected void onPreExecute() { 
     ..some easy operation befor start thread 
    } 

    @Override 
    protected void onPostExecute(Item resultTask) { 
     ..do what you want, thread is finish 
    } 

} 
+0

データベースを操作するためのデータ。バンドルを使うべきですか? –

+0

また、非同期タスクを使用すると、データベースを使用するすべてのクラスにAsyncTaskを持たなければなりません。これは正しいですか? –

+1

これはコマンドと似ています。あなたはInsertAynckTask、Update ...などを書いてもいいし、BuyAsynckTask、Sellなどを使っても良い。私は最後が最善の解決策だと思う。 onPreExecuteでは、dbDAOのインスタンスを取得し、doInBackgroundでinsert/update..etcを使用します。 – IronBCC

関連する問題