1

に膨らませているV24のAsyncLayoutInflaterは、UIスレッド

「のAndroidサポートライブラリの最新のリリースでは、リビジョン24人のGoogleの開発者がV4ライブラリにレイアウトの非同期インフレのための新たなヘルパークラスを焼いた」これが私のコードです:

Timber.e("Timeinflationstarts"); 
    AsyncLayoutInflater asyncLayoutInflater=newAsyncLayoutInflater(this.getContext()); 
    asyncLayoutInflater.inflate(R.layout.async_calendar,mLinearLayout, 
      new AsyncLayoutInflater.OnInflateFinishedListener() { 
     @Override 
     public void onInflateFinished(View view, int resid, ViewGroup parent) { 

      parent.addView(view); 
      Timber.e("timeWhenInflated"); 
     } 
    }); 

、これが出力されます:

07-05 20:36:22.331 18250-18250/? E/PersonalFragment: Timeinflationstarts 

07-05 20:36:22.371 18250-18250/? E/PersonalFragment: timeWhenInflated 

問題がasync_calendar.xmlのビューを見られるように多くの時間(その後、0.04s)を取っているということです画面上で、UIスレッドをブロックする!

私が見るラグが0.04をはるかに超えていることを確認するために、私はビューをさらに重くしました。

+1

インフレ率は、ビューを描く道のりのほんの一歩です。ビューは測定とレイアウトにどれくらいの時間がかかりますか?測定の場合は – ianhanniballake

+0

〜30ms、レイアウトの場合は2.5ms(階層ビューでビューノードの時間を取得する場合)。 –

答えて

1

それはそのgenerateLayoutParams(属性セット)スレッドセーフであり、すべてのビューは、インフレの一部として構成されている親を持っている必要が非同期的に膨張するレイアウトのために、いくつかの理由により

を発生することがありますハンドラを作成したり、myLooper()を呼び出さないでください。膨張させようとしているレイアウトを何らかの理由で非同期に構築できない場合、AsyncLayoutInflaterは自動的にUIスレッド上で膨張します。

また、AsyncLayoutInflaterを使用して、フラグメントを含むレイアウトを拡張することはできません。 docs