間違いから学ぶ!高度な学習ビデオのAndroidシリーズであるViewの描画プロセスを完全に理解してください

バックグラウンド

いつものように、簡単に説明しましょう。私は1991年に生まれ、164年に3冊の本を卒業した後、深センで働きました。小さな会社で、給料は13kで、家も車も住居もありません。

当時、人生は大丈夫だと感じていました。両親は年金を持っていました。基本的にはあまり心配する必要はありませんでした。ガールフレンドは長い間一緒にいて、とても思いやりがありました。彼らは私にあまり尋ねませんでした。

生活が順調に進んでいて満足していましたが、昨年の初めにガールフレンドの家に何かが起こって貯金をしました。流行が来てから家族が結婚を促し始め、圧力。

現在の賃金では生活を満足させることはできません。ここ数年で少し上昇しましたが、住宅価格や物価の上昇が早いので辞めることにしました。

昨年末から履歴書のキャストを始めました。振り返ってみると、合計33の履歴書をキャストしました。興味のある企業は3社のみで、そのうち0社が面接を行いました。

(最初はとても悲しかったですが、後で...後で慣れました)

それからしばらくして、突然、経済的な冬であろうと私の冬であろうと、すべてがここにあることに気づきました。

インタビュアー:ガベージコレクションのメカニズムについて教えてください

私:…強い参照カウントと弱い参照カウントを組み合わせることで、参照カウントの循環参照問題を解決できます。実際、Androidのスマートポインターは次のように実装されています...

スマートポインタ

スマートポインターはAndroidプロジェクト全体で広く使用されています。バインダー関連のソースコードでspおよびwpタイプの参照を確認できます。

 sp<IBinder> result = new BpBinder(handle);

 wp<IBinder> result = new BpBinder(handle);

spは強ポインター参照、wpは弱ポインタ​​ー参照です。

Javaでは、オブジェクトの破棄やメモリの解放を気にする必要はありません。GCメカニズムは、不要なオブジェクトを自動的に識別してリサイクルします。スマートポインターは、ネイティブレイヤーの小さなGC実装です。

スマートポインタは、参照カウントによって役に立たないオブジェクトを識別します。スマートポインタを使用するオブジェクトは、RefBaseから継承する必要があります。RefBaseは、このオブジェクトの強参照と弱参照の数を維持します。

強いポインタspは "="演算子をオーバーロードします。他のオブジェクトを参照する場合、spデストラクタでは強い参照カウントは+1であり、強い参照カウントは-1です。強い参照カウントが0に減少すると、参照されるオブジェクトが破壊されます。このようにして、オブジェクトの自動解放が実現されます。

wpデストラクタでは、弱ポインタ​​が他のオブジェクトを参照している場合、弱参照数は+1、弱参照数は-1です。強参照数が0の場合、弱参照かどうかに関係なく、参照されているオブジェクトは破棄されます。 countが0かどうか。

循環参照問題を解決する方法

強い参照カウント方法のみに依存すると、循環参照の問題が発生し、オブジェクトが解放されなくなります。弱い参照は、循環参照の問題を解決するために特に使用されます。

AがBを強く参照している場合、BはAを参照するときに弱参照を使用する必要があります。それが役に立たないオブジェクトであるかどうかを判断する場合、強参照カウントのみが0と見なされ、弱参照カウントの数は関係ありません。

これにより、循環参照が原因でオブジェクトを解放できないという問題は解決されますが、ワイルドポインタの問題が発生します。Bが弱いポインタを介してAにアクセスしようとすると、Aが破壊され、Aへの弱いポインタがワイルドポインタアップ。この場合、Aが存在しないことを意味し、再作成などの他の操作が必要になります。

スマートポインタのカスタマイズルール

スマートポインタは固定されていません。「強参照カウントが0の場合、弱参照カウントが0であるかどうかに関係なく、参照されるオブジェクトは破棄されますが、ルールはカスタマイズできます。RefBaseは、参照カウンターのルールを設定するために使用できるextendObjectLifetime()メソッドを提供します。次の3つのルールを含め、ルールが異なれば、ターゲットオブジェクトを削除するタイミングの判断も異なります。

  • OBJECT_LIFETIME_STRONG:オブジェクトは、このオブジェクトのメモリ空間の強力なカウンタ値が0の場合にのみ破棄されます

  • OBJECT_LIFETIME_WEAK:このオブジェクトのメモリ空間の強いカウンターと弱いカウンターの値が両方とも0の場合にのみ、オブジェクトは破棄されます

  • OBJECT_LIFETIME_MASK:2つのカウンターが両方とも0であるかどうかに関係なく、オブジェクトは破棄されません。つまり、通常のポインターと同じであるか、手動でオブジェクトを解放する必要があります。

やっと

最後に、この期間に私がレビューした情報です。この情報は、偶然にも友人によって共有されました。2020年から2021年にかけてのTencent、ByteDance、Ali、Baiduの実際のインタビューの質問の分析が含まれ、各技術を整理しています。ポイント。ビデオとPDFになります(知識のコンテキスト+多くの詳細)。

あり 、高度な建築技術の高度なマインドマップと高度な先進的なアーキテクチャの材料はに あなたが学ぶ助けと前進。ここで私も自由のためにあなたとそれを共有し、学ぶためにインターネット上であなたの情報のための時間検索を保存するか、友人と共有することができます一緒に学ぶためにあなたの周り。

困っている友達はクリックできます:** Androidインタビュー情報**無料で入手〜

励まし合いましょう〜

613960897049)]

[外部リンク画像が転送されています...(img-W6OT0pUf-1613960897053)]

励まし合いましょう〜

おすすめ

転載: blog.csdn.net/a120464/article/details/113930873