2016-03-03 1 views
12

Firebaseを使用するAndroidアプリケーションでは、Firebaseがクエリ回答を返すとバック​​グラウンドで長い操作を実行する必要があります。例えば:Firebase Android:onDataChange()イベントは常にメインUIスレッドで実行されますか?

query.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot data) { 
     dosomething very long. . . 
     then call a callback forUI thread 
    } 

私はfirebaseが非同期モードでクエリを実行することを知っているが、onDataChange()方法は、私はカスタムのバックグラウンドスレッドでクエリを呼び出そうとしても、常にメインUIスレッドで実行しているようです。

このユースケースの管理方法を知っている人はいますか?

答えて

16

Firebaseリスナーのコールバックは、実際にはメインのUIスレッドで実行されます。

コールバックで大量の操作を行う必要がある場合は、AsyncTaskをスピンアップして作業してください。 AsyncTask.doInBackground()メソッドは別のスレッドで実行されるため、Android UIはブロックされません。しかしAsyncTask. onPostExecute()は再びメインスレッドで実行されるので、そこからUIビューを更新することができます。

+0

今はっきりしています。私はonDataChange()メソッドで非同期タスクを直接起動し、このタスクは最後にコールバックUIリスナを実行します。 – toofoo

+8

コールバックアクションを取得したいスレッドを設定する方法はありますか? –

+1

フランク、あなたはその考えを覚えていますか? Firebaseコールバックを返すスレッドを選択できるようにするには? –

関連する問題