Androidの配置の遅延適用
不透明な画像が表示を所有している間、既存のレンダラーがネイティブ配置の適用を遅らせる場合にのみ使います。基本の登録では、これらのコールバックは不要です。
たとえば、不透明なネイティブ広告がフィード内をスクロールするとします。画像がDOMに追従している間、非表示のネイティブビューを繰り返し配置しても、見えているピクセルは変わらず処理だけが増えます。配置を保留し、ネイティブコンテンツを再表示する前に最新の位置を適用すれば、古い位置に戻ることを防げます。不透明な画像を利用できないビューでは、通常の配置追従を維持してください。
AndroidのVIEW利用側は、被覆の成功後にUIスレッドでisProjectingを読み、同じサイズのネイティブ配置処理を保留できます。受理した最新の配置だけを保持し、シーケンスと世代の検証を続け、非表示、リサイズ、終了処理は直ちに行います。beforeNativeRevealを指定すると、通常の復元、失敗からの復旧、アクティブ画像の解放でネイティブのピクセルを再表示する前に、保留した配置を同期的に適用できます。Engineはコールバックを呼ぶ前にisProjectingを解除するため、配置の適用を再び保留してはいけません。保留中の処理がなくても呼ばれることがあるため、コールバックは冪等にしてください。非表示・破棄時には利用側の保留処理を消去し、適用前に読み込み済みViewの識別情報を検証します。このコールバックは、コンテンツやサイズの無効化、JavaScriptによるジオメトリ追従を置き換えません。
不透明な画像から戻る際の最終配置(Android)
通常はスクロールごとにネイティブ配置を計測・送信しているプラグインは、最終配置のハンドオフを選択できます。AndroidのNativeUIProjection登録にupdatePlacement: (JSONObject) -> Unitを渡し、WebホストをbindProjectionPlacement(element, measure, invalidate)でバインドします。
binding.projectedがtrueになるのは、ネイティブが画像のハンドオフを確認した後だけです。trueの間、プラグインは配置全体のバッチで、そのホストの最後の配置を再利用し、計測を省略できます。他のホストは通常の更新を続けます。measure()はJSONオブジェクトを同期的に返します。Engineはそれを既存の復元要求(またはアクティブ画像の復旧要求)に含めます。ネイティブはアクティブ画像のトークンとViewの識別情報を検証し、updatePlacementを呼んだ後、ネイティブを再表示して描画を確認します。ブリッジの往復は増えません。- プラグインは
updatePlacementで自らの識別情報、世代、ホストごとのシーケンスを検証しなければなりません。古い配置や無効な配置は例外を投げて拒否します。あるホストの最終更新によって、別のホストの更新が失われないようにしてください。 - ハンドオフ要求の失敗後に
invalidate()が呼ばれます。楽観的な配置キャッシュや重複排除キャッシュを消去し、通常の配置の再調整をスケジュールします。 - ホストを取り外すときはバインディングを破棄します。セッションの所有権により、古い登録から遅れて届く確認応答が、新しい登録の投影状態を解除することを防ぎます。一時停止、アプリ側で指定した可視性、レイアウトの変更には、引き続きプラグインの通常の可視性・無効化の経路を使います。
この任意設定は、updatePlacementを持たない登録の動作を変えません。AndroidはcaptureMode = CaptureMode.VIEWでない場合、updatePlacementを拒否します。ライブ動画などキャプチャできないコンテンツは、failedFallback = NATIVEのもとでネイティブの配置追従を続けます。