始まり
最近、プログラマーの輪は非常に活発です。少し前に、魔法のオープンソースプロジェクトが996.ICU
誕生しました
。数日で10w以上の星と1w以上のフォークがあります。これは、Githubで最も急成長しているプロジェクトと言えます。996.icu
プログラマー996の深刻な残業状況が公表され、馬雲や劉強東などのインターネット大物も996の声で世論の最前線に押しやられた。
この問題はほんの数日で止まり、インターネット界には別の大きなメロンがありました。今日の午後、オープンソースライブラリgo-common
のオープンソースライブラリはメロンの友人の間で激しい議論を引き起こし、5000以上の星と5000以上のフォークに到達しました。数時間。しばらくすると、数百の星でリフレッシュされ、996.ICUに追いつく勢いがあります。
ByteDanceはこの質問を3つの側面から行っており、ここで整理しました。皆さんのお役に立てば幸いです。ようこそ、ギャップを確認して埋めてください。
個別のデータ処理とビューの読み込み
リモートからのデータのプルは非同期である必要があることがわかっています。データをプルした後、処理のために急いでVHにデータをスローする可能性があります。実際、データ処理ロジックも非同期処理に配置する必要があります。アダプターが通知した後変更すると、ViewHolderは、次のようなデータを実行し、バインディングロジックを簡単かつ圧力をかけずに表示できます。
mTextView.setText(Html.fromHtml(data).toString())
ここでのHtml.fromHtml(data)メソッドは、より時間がかかる可能性があります。複数のTextViewがある場合、より時間がかかり、フレームのドロップとフリーズが発生します。この手順をネットワーク非同期スレッドFromと組み合わせると、ユーザーの観点からすると、ネットワークの更新時間はせいぜい少し長くなります。
データの最適化
リモートデータをページごとにプルし、プルしたリモートデータをキャッシュし、セカンダリロードの速度を向上させます。新しく追加または削除されたデータの場合、データを盲目的にグローバルに更新するのではなく、DiffUtilを使用してデータをローカルに更新します。
レイアウトの最適化
遷移描画を減らす
レイアウトレベルを下げるには、カスタムビューを使用してレベルを下げるか、レイアウトをより合理的に設定してレベルを下げることを検討できます。RecyclerViewでConstraintLayoutを使用することはお勧めしません。多くの開発者は、それを使用する方が悪いとすでに報告しています。関連するリンクは次のとおりです。ConstraintLayoutは遅いですか?、constraintlayout1.1.1はリストビューでうまく機能しません。
xmlファイルの膨張時間を短縮します
ここでのxmlファイルには、レイアウトのxmlだけでなく、ドローアブルのxmlも含まれています。xmlファイルは、特にタイプが増加するにつれて、アイテムの再利用の可能性が非常に低い場合に、時間のかかる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;
}
};
著者は2013年にJava開発からAndroid開発に切り替えました。彼は小さな工場にいて、HuaweiやOPPOなどの大きな工場にも行っていました。2018年4月に、これまでAliに入社しました。
私は多くのインタビューに参加し、インタビュアーとして多くの人々にインタビューしました。ほとんどのジュニアおよび中級のAndroidエンジニアは、スキルを向上させたいと考えています。彼らは自分で成長することがよくあります。非体系的な学習効果は非効率的で長く、天井技術の停滞に遭遇しやすいです。
Ali P7レベルで最も体系的なAndroid開発の主流テクノロジーのリストをまとめました。これは、3〜5年以上の経験を持つ小規模なパートナーの詳細な学習と改善に特に適しています。
主にAliと、ByteDance、Tencent、Huawei、Xiaomi、およびその他の第一線のインターネット企業の主流のアーキテクチャテクノロジが含まれます。Androidの開発を深く学び、資格のあるシニアエンジニアになりたい場合は、これらの高度なAndroidテクノロジーの選択肢をブックマークできます。
過去数年間にAlibaba、Tencent、ByteDance、Huawei、Xiaomiなどの企業の面接の質問を収集して整理し、面接の要件と技術的なポイントを大規模で包括的な「Androidアーキテクト」面接Xmindに分類しました。 (実際、多くのエネルギーを費やすのは予想よりも優れています)、知識コンテキスト+ブランチの詳細を含みます。
Javaの言語と原則;
大きな工場、小さな工場。Androidのインタビューでは、最初にJava言語に精通しているかどうかを確認します
高度なUIとカスタムビュー、
カスタムビュー、Android開発の基本スキル。
パフォーマンスチューニング;
データ構造アルゴリズム、デザインパターン。重要な基礎と重要なポイントはすべて熟練している必要があります。
NDKの開発;
将来の方向性、高給は必ずあるでしょう。
最先端のテクノロジー、
コンポーネント化、ホットアップグレード、ホットリペア、フレーム設計
インターネット上にはAndroidを学ぶための資料がたくさんありますが、学んだ知識が構造化されておらず、問題が発生した場合は、味わって深く勉強するのをやめるだけでは、真の技術向上を実現することは困難です。この体系的な技術システムが方向性の参考になることを願っています。
これらの技術フレームワークを構築しているときに、システムの高度な高度なチュートリアルも整理しました。これは、GitHubに表示される独自の断片化された学習効果よりもはるかに優れています。「Androidアーキテクチャビデオ+学習ノート」
もちろん、これらの能力を深く学び、習得することは容易ではありません。プログラマーとしての学び方や仕事の集中度は誰もが知っていますが、どんなに忙しくても週に2時間は勉強する必要があります。
E8%96%AA%EF%BC%81.md)**
もちろん、これらの能力を深く学び、習得することは容易ではありません。プログラマーとしての学び方や仕事の集中度は誰もが知っていますが、どんなに忙しくても週に2時間は勉強する必要があります。
半年以内に、あなたは変化を見ることができるでしょう!