Výkonnostní tip pro Xamarin.Forms – Fast Renderers

Tento článek je prvním ze série “připomenutí” která vám pomohou udělat vaši aplikaci co nejvýkonnější. Dnes se podíváme na Fast Renderers, které pomohou optimalizovat běh aplikace na Androidu.

Xamarin

Co jsou Fast Renderers?

Ovladací prvky v Xamarin.Forms se zobrazují v nativním prostředí pomocí konceptu Renderers. Drtivá většina Android Renderers dědí od třídy ViewRenderer<TView, TNativeView> která je definována jako:

Jdeme-li hlouběji, zjistíme, že VisualElementRenderer<TElement> je definována jako:

Zde je FormsViewGroup jen lehce upravená Xamarin.Forms verze  nativní třídy ViewGroup. Skutečný nativní view (jako Button) je uvnitř tohoto vnějšího ViewGroup. Tímto způsobem je možné snadno a univerzálně dát všem ovladacím prvkům “univerzální” chování jako padding, zpracování gest a jiné.

Má to však i výkonnostní dopad – každý ovladací prvek který vytvoříte vygeneruje dvě view v hierarchii Androidu. Ačkoliv to není problém v jednoduchých stránkách aplikace, v případě velkých a složitých seznamů se to stává výraznějším problémem. Naštěstí nás mohou zachránit Fast Renderers.

Když ve svém projektu povolíme Fast Renderers, nahradí automaticky výchozí renderery pro nejčastěji používané ovladací prvky:

  • Button
  • Image
  • Label
  • Frame

Fast Renderers již nedědí od ViewRenderer<TView, TNativeView> a namísto toho zpracovávají layout a gesta přímo pomocí nativního view. Pro příklad se můžete podívat na implementace Fast Rendereru pro Button zde na GitHubu.

Jak povolit Fast Renderers?

Fast Renderers jsou experimentální funkcí a nejsou automaticky povoleny. Můžete je zapnout pro celý projekt přidáním následujícího řádku kódu před voláníForms.Init() v MainActivity vašeho Android projektu:

Uvnitř frameworku se takto nastaví flag, který se následně kontroluje uvnitř metody LoadApplication ve FormsAppCompactActivity jak lze vidět zde ve zdrojovém kódu.

Je důležité zmínit, že Fast Renderers jsou kompatibilní pouze s app compat aktivitou a mají vliv pouze na Androidu.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.