2017-01-30 1 views
1

私はfirebaseで私の読み取り専用のデータを持っています、それは約50KBです。 アプリの起動時に完全なデータが必要です。そのために私は私ののonCreateメソッドアプリケーションの起動時にFirebaseがデータをロードするのに3秒以上かかる

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
DatabaseReference myRef = database.getReference(); 
Log.i("FIREBASE", "Before Firebase Call"); 
myRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     Log.i("FIREBASE", "Call Completed"); 
     // do my work i.e build my UI 
    } 

    @Override 
    public void onCancelled(DatabaseError databaseError) { 
     Toast.makeText(context, "Please Check your Internet connection", Toast.LENGTH_LONG); 
    } 
}); 

に次のコードを書いた今、私の問題は、Firebaseがデータを取得4秒以上を取っていますさ。上記のコードでは、両方のログステートメントの間に4秒の間隔があります。 'Firebase Call Before' & 'Call Completed'

私は実際のデバイスであっても、少なくとも3秒かかることさえあります。 ここに何か不足していますか?

答えて

2

最初に接続を確立するときにオーバーヘッドがあります。接続は安全なwebsocketを介して行われ、安全であることを確認するために、クライアントとサーバーの間に複数回の往復が必要です。遅い接続、特にFirebaseサービスがホストされる場所とは異なる世界の部分では、このような遅れを見ることは非常に可能です。

最初にデータが必要であるのを待つのではなく、アプリケーションが起動するとすぐにデータベースから読み取ろうとすると、遅延の一部を緩和することができます。それはASSAPのwebSocket接続を開始するので、最初の実際のデータ要求の知覚遅延は極端ではないようです。

私のアプリでは、アプリケーションがデータを表示しようとする前に、読み込み画面(スプラッシュ画面)を使用して、必要なすべてのデータが読み込まれていることを確認します。これは知覚される読み込み時間を短縮するのにも役立ちます。

+0

実際、どのような種類のアクティビティでもデータを表示する前にデータを読み込むのは問題ありません。後であらゆる種類のアクティビティを開き、データを表示するのは瞬時になります。しかし、私はローディング画面に関する質問があります。データの読み込みを開始すると、特定のアクティビティになったときに、同じアクティビティに再び出たときに同じスプラッシュ画面が表示されないようにするために使用できるロジックの種類があります。基本的に、データが既にキャッシュにロードされていることを確認する方法はありますか? – cool

2

Doug Stevensonは次のように述べています。初めてデータをロードするときや、Firebaseサービスのホストとは異なる世界の一部にいる場合は少し遅れているはずです。

メインアクティビティを表示する前にすべてのデータを読み込む読み込み画面(スプラッシュ画面)を作成することをお勧めします。このロードアクティビティで 、あなたはkeepSyncedメソッドを使用して、すべてのデータをロードすることができます

FirebaseDatabase.getInstance().getReference().keepSynced(true); 

この方法は、ディスクキャッシュにあなたの全体のデータベースをダウンロードします。メインアクティビティを表示すると、FIrebaseはこのキャッシュからデータをロードします。

一般的に、画面の読み込みは1000-1500ミリ秒の間画面にとどまります。しかし、データが3秒かかると言っているので、3000ミリ秒のアニメーション(または最後の3000ミリ秒を組み合わせた一連のアニメーション)を再生する読み込み画面を作成することをお勧めします。アニメーションの作成方法がわからない場合は、Chet Haase's DevBytes videoをご覧ください。

関連する問題