2017-02-02 17 views
-2

私はIBinder経由でデータベースにバインドする必要があるアプリケーションに取り組んでいます。私は、アプリケーションのサブクラスにフレームワークの初期化を入れることを計画していました。そのようなものはプレゼンテーション関連ではなく、アプリケーションごとに1回インスタンス化されることがわかっています。Androidアプリケーションの起動シーケンス

public class MyApplication extends MultiDexApplication { 
    public void onCreate() { 
     super.onCreate(); 
     // Bind to the db server 
     Intent intent = new Intent(getBaseContext(), DB.BIND_ADDRESS); 
     super.bindService(intent, 
      new ServiceConnection() { 
      @Override 
      public void onServiceConnected(ComponentName name, 
             IBinder service) { 
      DB.start(service); 
      } 
      @Override 
      public void onServiceDisconnected(ComponentName name) { 
      DB.shutdown(); 
      } 
     }, 
     Context.BIND_AUTO_CREATE 
    ); 
    } 
} 

私はに実行する問題は、私の活動が開始されるまでの私のServiceConnection.onServiceConnected()へのコールバックが行われていないことであると私は活動を表示するために利用可能なデータベースを必要とするので、それが問題ですデータ。私は現在この動作を見ています。

myApplication.onCreate() 
myActivity.onCreate() 
myActivity.onStart() 
serviceConnection.onServiceConnected() 

これは、自分のアクティビティでonStart()が呼び出されたときにデータベースがまだ接続されていないために発生します。

私はむしろ、このインフラストラクチャの初期化をアクティビティで移動する必要はありません。だから私は2つの質問があります。

  1. はonServiceConnected()が呼び出された まで待機するapplication.onCreateをブロックする方法はありますか?これはシングル スレッドです私はどのように表示されません。
  2. この

    は、私は、次の起動シーケンスを有するよう

その 初期化を完了した前に私のアプリケーションにどの 活動)

myApplication.onCreate() 
serviceConnection.onServiceConnected() 
myActivity.onCreate() 
myActivity.onStart() 
任意のONSTARTを(起動しないようにアンドロイドを伝えるためにそこの方法です

または

myApplication.onCreate() 
myActivity.onCreate() 
serviceConnection.onServiceConnected() 
myActivity.onStart() 
+0

からフェッチすることであるように行うための方法はありませんか? –

+0

アクティビティのonStartが呼び出される前にインフラストラクチャの初期化を完了したい。 –

+0

私はあなたの意見を持っています。 –

答えて

0

あなたは、Android framewで動作するようにコードを書き換える必要がありますork。 onCreateを待つ方法はありません。すべてのコードが単一のスレッド上で発生します。また、onCreateが終了するまでサービスを開始しないことさえあります。 onResumeまたはonServiceCreatedを使用してデータをロードすることをお勧めします。

0

that.The最善の解決策は、それが接続されるまでのロード]ダイアログのいくつかの種類を示し、あなたがこれを達成するために何をしたいデータベース

関連する問題