序文
モバイルの研究開発は熱く、ますます多くの人々がAndroidの開発を学び始めています。しかし、多くの人は、始めやすいし、成長しにくいと感じており、将来についてはかなり混乱しており、スキルを向上させる方法や次の段階に何を追加する必要があるのかを知りません。市場は知識グラフについても主に話し合っており、システムと成長リズムの感覚が欠けています。これにより、Android R&Dへの高度な道筋をまとめ、すべての人に役立つことを願っています。
ここでは、包囲戦を初級、中級、上級、上級の4つの段階に分け、R&Dと設計機能、ツールの使用、システムの原則、およびアーキテクチャの要件を作成します。
ByteDanceはこの質問を3つの側面から行っています。ここで整理しました。皆さんのお役に立てば幸いです。空席を確認して記入してください。
データ処理とビューの読み込みの分離
リモートからのデータのプルは非同期である必要があることはわかっています。データをプルした後、処理のために急いでVHにデータをスローする可能性があります。実際、データ処理ロジックも非同期処理に配置する必要があるため、アダプターが通知した後変更により、ViewHolderは、次のようなデータを実行し、バインディングロジックを簡単かつプレッシャーなしで表示できます。
mTextView.setText(Html.fromHtml(data).toString())
ここでのHtml.fromHtml(data)メソッドは、より時間がかかる可能性があります。複数のTextViewがある場合、時間はより深刻になり、フレームのドロップとフリーズが発生します。この手順をネットワーク非同期スレッドと組み合わせると、ユーザーの観点からは、ネットワークの更新時間はせいぜい少し長くなります。
データの最適化
ページングによってリモートデータをプルし、プルされたリモートデータをキャッシュし、セカンダリロードの速度を向上させます。新しく追加または削除されたデータの場合、データを盲目的にグローバルに更新するのではなく、DiffUtilを使用してデータをローカルに更新します。
レイアウトの最適化
遷移描画を減らす
レイアウトレベルを下げるには、カスタムビューを使用してレベルを下げるか、レイアウトをより合理的に設定してレベルを下げることを検討できます。RecyclerViewでConstraintLayoutを使用することはお勧めしません。多くの開発者は、これを使用するとさらに悪いと報告しています。 。関連リンクは次のとおりです。ConstraintLayoutは遅いですか?、constraintlayout1.1.1はリストビューでうまく機能しません。
xmlファイルの膨張時間を短縮します
ここでのxmlファイルには、レイアウトのxmlだけでなく、ドローアブルのxmlも含まれています。xmlファイルは、特にTypeが増加するにつれて、Itemの再利用の可能性が非常に低い場合に、時間のかかるIO操作によってItemViewを膨らませます。 、this inflateによる損失は非常に大きいです。現時点では、の各ノードの属性に対応するAPIを把握している限り、コードを使用してレイアウト、つまり新しいView()メソッドを生成できます。 xml。
ビューオブジェクトの作成を減らす
少し複雑なアイテムには多数のビューが含まれ、多数のビューの作成にも多くの時間がかかるため、ItemViewは可能な限り単純化する必要があります。ItemTypeを設計するときは、次のことができるパーツを設計してください。可能な限り複数のViewTypeで共有して、カスタムビューを設計し、ビューの構築とネストを減らします。
その他
その他は重要ではないという意味ではありませんが、分類することはできません。一部の操作では、RecyclerViewが大幅に最適化される場合があります。
- プリフェッチ機能を使用するには、RecycleViewバージョンを25.1.0以降にアップグレードしてください。RecyclerViewデータのプリフェッチを参照してください。
- アイテムの高さが固定されている場合は、RecyclerView.setHasFixedSize(true);を使用して、requestLayoutがリソースを浪費しないようにすることができます。
- スライドプロセス中にロード操作を停止するには、RecyclerView.addOnScrollListener(listener);を設定します。
- アニメーションが不要な場合は、((SimpleItemAnimator)rv.getItemAnimator())。setSupportsChangeAnimations(false);を渡すことができます。デフォルトのアニメーションをオフにして、効率を向上させます。
- android:textAllCaps = "true"の代わりに、TextViewにString.toUpperCaseを使用します。
- 代わりに、TextViewのStaticLayoutまたはDynamicLayoutのカスタムビューを使用します。
- RecyclerView.onViewRecycled(holder)をオーバーライドして、リソースをリサイクルします。
- RecycleView.setItemViewCacheSize(size);を使用してRecyclerViewのキャッシュを増やし、時間のスペースを使用してスクロールのスムーズさを向上させます。
- 複数のRecycledViewsのアダプターが同じである場合、たとえば、ネストされたRecyclerViewに同じアダプターが存在する場合、RecyclerView.setRecycledViewPool(pool);を設定することでRecycledViewPoolを共有できます。
- ItemViewのリスナーを設定します。アイテムごとにaddXxListenerを呼び出さないでください。XxListenerを共有し、IDに基づいてさまざまな操作を実行する必要があります。これにより、オブジェクトの頻繁な作成によって発生するリソース消費が最適化されます。
- 以下に示すように、getExtraLayoutSpaceを使用して、RecyclerViewによって予約される追加のスペースを増やします(表示範囲外では、追加のキャッシュスペースが必要です)。
new LinearLayoutManager(this) {
@Override protected int getExtraLayoutSpace(RecyclerView.State state) {
return size;
}
};
やっと
記事の長さを考慮して、これらの質問と回答、長年のインタビューで出会った質問、およびいくつかのインタビュー資料をPDFドキュメントにまとめました。友人が必要な場合は、私にメールしてください[インタビュー]無料で受け取る
Androidのインタビュー資料の概要を受け取るには、ここをクリックしてください
mg-lbxroUhK-1614050724720)]
[外部リンク画像が転送されています...(img-jHECy98f-1614050724723)]
それが好きな友達はフォローしたり、転送したり、ありがとうございます!