Android開発の月給は13Kと30Kですが、これはこれらの人気のあるフロンティアの知識の違いにすぎません。

序文

赤の女王は言った:「この国では、あなたはあなたを定位置に保つために走り続けなければなりません。」

過去には、Androidの4つの主要コンポーネントを知っている限り、それは甘いケーキです。明らかにその時代は過ぎました。人間とコンピューターの相互作用の経験要件、アプリのユーザーエクスペリエンスの要件、流暢さなどの改善により、現在市場はAndroidを開発していますその人の要求はもはや同じではありません。

このような大きな環境は、Android開発エンジニアの存続状況にも大きな影響を与えます。

13Kと30Kの違いは何ですか?

私たちはテクノロジーに従事しており、基本的にテクノロジーに依存して給餌し、あらゆるレベルの給与を受け取ります。そのため、5年間の開発で13Kしか取得できないが、他の人は30Kを取得できる場合、多くの場合、時代に追いつくことができません。

今日の環境では、過去にAndroidの基本的な知識をある程度習得しただけのジュニアAndroidエンジニアの状況は非常に困難になります。給与は上がるのが難しく、一般的に5Kから13K(13Kはほぼ上限)のままです。しかし、人口のこの部分の割合は非常に高く、それはまた、ますます強い声につながっています:Androidは寒いです!

しかし、市場を見ると、まだ採用できない高給のAndroidの仕事がたくさんあります。Androidの開発はありませんか?いいえ、多くのAndroid開発は採用ニーズを満たしていません。


市場の需要の観点から、Androidの上級エンジニアはまだ非常に市場性が高いので、正しいキャリアプランはピラミッド型であり、コアコンピタンスはしっかりしている必要があると思います。私たちのAndroid開発のコアコンピタンスはテクノロジーです。

13Kでも30Kでも、最終的な分析では、それはあなた自身の技術的能力に基づいています。

以下は、現在のAndroidおよびモバイルインターネット業界で習得する必要のあるいくつかのテクノロジーの概要です。これは私が作成したリストです。

これらをマスターする限り、2021年には基本的に問題はありません。

  • 一般原則、リフレクション原則、Java仮想マシン原則、スレッドプール原則
  • 注釈の原則、注釈の原則、シリアル化
  • アクティビティ知識システム(アクティビティライフサイクル、アクティビティタスクスタック、アクティビティ起動モード、ソースコードの表示、フラグメントコア関連、サービス原則など)
  • コードフレームワーク構造の最適化(データ構造、ソートアルゴリズム、デザインパターン)
  • APPパフォーマンスの最適化(ユーザーエクスペリエンスの最適化、適応、コードチューニング)
  • ホットリペア、ホットアップグレード、フックテクノロジー、IOCアーキテクチャ設計
  • NDK(cプログラミング、C ++、JNI、LINUX)
  • 開発効率を向上させる方法は?
  • MVC、MVP、MVVM
  • WeChatミニプログラム
  • ハイブリッド
  • フラッター

1.Androidアーキテクチャの設計パターン

  • MVCアーキテクチャのデザインパターン:MVCのフルネームはModel View Controllerであり、model-view-controllerの略語です。
  • MVPアーキテクチャのデザインパターン:MVCのフルネームはModel View Persenterです。MVPはMVCから進化し、現在は主流の開発モデルです。
  • MVVMアーキテクチャデザインパターン:MVVMのフルネームはModel-View-ViewModelであり、これは本質的にMVCの改良版です。

さまざまなモデルの****主要目的は、ビュー(View)とモデル(Model)を分離することです。つまり、UIインターフェイスの表示とビジネスロジックを分離します。

1.1アーキテクチャデザインパターン-MVC

(1)定義:

Android開発プロセスでは、MVCフレームワークパターンを使用するために使用される、より一般的な開発フレームワーク。

  • M(モデル)レイヤー:エンティティモデル、処理业务逻辑例:データベース操作、ネットワーク操作、I / O操作、複雑な操作、時間のかかるタスクなど。
  • V(表示)レイヤー:処理中数据显示Android開発では、通常、xmlレイアウトファイルに対応します。
  • C(コントローラー)レイヤー:処理用户交互Android開発では、通常、Activity / Feagmentに対応します。Androidは主に、アクティビティを通じてユーザーの操作とビジネスロジックを処理し、ユーザーの入力を受け入れ、モデルとビューを呼び出してユーザーのニーズを満たします。

(2)特徴

  • 低結合
  • 再利用可能で拡張が簡単
  • モジュールの責任の明確な分割

(3)例

android本身的设计结构符合 MVC 模式。

(4)MVCの長所と短所

  • MVCの利点:MVCパターンは、コントローラーを使用して全体的な状況を制御し、ビュー表示をモデルの変更から分離します
  • MVCにも制限があります。

ビューレイヤーは、xmlレイアウトファイルに対応する非常に限られた処理を実行できるため、ビュー関連の操作のほとんどをコントローラーレイヤーのアクティビティに移動する必要があります。このアクティビティは、ビジネスロジックを処理するだけでなく、UIを操作するために、2つの役割(ビューレイヤーとコントローラーレイヤー)として機能することと同じです。ページのビジネスが多くて複雑になると、アクティビティのコードはますます肥大化して複雑になります。

1.2アーキテクチャデザインパターン-MVP

MVPは従来のMVCモデルから進化したものであり、基本的な考え方は似ています。コントローラー/プレゼンターが論理処理を担当し、モデルがデータを提供し、ビューが表示を担当します。Android開発では、MVPの特定の実装プロセスは、PresenterがViewリクエストを受信すると、Modelレイヤーからデータを取得し、そのデータを処理することです。処理されたデータは、ビューレイヤーのインターフェイスを介してアクティビティまたはフラグメントにコールバックされます。このようにして、MVPは、アクティビティまたはフラグメントを実際のビューにすることができ、UI関連の処理のみを実行し、他のビジネスプロセスは処理しません。

(1)定義

  • M(モデル)レイヤー:エンティティモデル、処理业务逻辑例:データベース操作、ネットワーク操作、I / O操作、複雑な操作、時間のかかるタスクなど。
  • V(表示)レイヤー:責任ありView的绘制以及与用户交互Android開発では、通常、xmlレイアウトファイルとActivity / Fragmentに対応します
  • P(プレゼンター)レイヤー:モデルレイヤーとビューレイヤーの間のデータ交互合計を完了する責任があります业务逻辑

(2)例

(3)MVCとMVPの違い

MVPのビューはモデルを直接使用しません。それらの間の通信はプレゼンターを介して実行されます。すべての対話はプレゼンター内で行われます。MVCでは、ビューはコントローラーを経由せずにモデルからデータを直接読み取ります。

  • MVCとMVPの最大の違い:MVCのモデルレイヤーとビューレイヤー能够直接交互、MVPのモデルレイヤーとビューレイヤー不能直接交互は、プレゼンターレイヤーを介して相互作用する必要があります。
  • アクティビティの責任は異なります。アクティビティはMVCのコントローラーレイヤーに属し、MVPのビューレイヤーに属します。これは、MVCとMVPの大きな違いです。Androidは主にMVCからMVP開発までであると言えます优化Activity的代码,避免Activity的代码臃肿庞大
  • ビューレイヤーは異なります。MVCのビューレイヤーはXMLレイアウトファイル(またはJavaでカスタマイズされたビュー)を参照します。MVPのビューレイヤーはアクティビティ(またはフラグメント)です。
  • コントロールレイヤーは異なります。MVCのコントロールレイヤーはアクティビティ(またはフラグメント)です。MVPのコントロールレイヤーはプレゼンターであり、実際のものは多くありません。主にモデルレイヤーとビューの間の相互作用を担当します。層。

(4)MVPの長所と短所

  • MVPの利点は次のとおりです。

モデルとビューは完全に分離されており、モデルに影響を与えることなくビューを変更できます。プロジェクトコードの構造が明確で、どのようなことが一目でわかるかがわかります。複数のビューにプレゼンターを使用しても、プレゼンターのロジック、この機能は非常に便利です。ビューはモデルの変更よりも頻繁に変更されるためです。共同作業(たとえば、設計者が画像を取得する前にビジネスロジックコードを記述できます)

  • MVPには欠点もあります。

インターフェイスが多すぎると、コーディング効率にある程度影響します。ある程度、Presenterのコード量が多すぎます。
Presenterのさまざまなビジネス上の問題を軽減するために、GoogleはMVVMを立ち上げ、データ駆動を通じてPresenterのコード量を削減しようとしています。

「モバイル開発アーキテクト学習ビデオ+ BATインタビュースペシャルPDF +グレートゴッドスタディノート」で私を見つけてください

1.3アーキテクチャデザインパターン-MVVM

(1)定義

  • M(モデル)レイヤー:实体模型データの取得、保存、変更を主に担当し、ViewModelレイヤーが呼び出すデータインターフェイスを提供します(ただし、前に定義したモデルレイヤーとは異なります)。
  • V(ビュー)レイヤー:通信Activity/Feagmentxml布局ドキュメント、ユーザーインタラクションとビューのレンダリングを担当
    説明:ビューレイヤーのみの操作UI(UI更新データバインディングが実現されます);操作に関連するビジネスロジックとデータを実行できません
  • VM(ViewModel)レイヤー:データの完成交互、モデルレイヤーとビューレイヤーの間を担当します。业务逻辑
    説明:ビューモデルレイヤーは、ビジネスロジックに関連するデータ操作のみを実行できます。UI関連の操作は実行できません。

2.Androidプラグイン

プラグイン化の理由:ビジネスの増加に伴い、ビジネスロジックコードがますます増え、apkパッケージが徐々に増加しているため、メンテナンスやアップグレードに役立ちません。機能モジュールはプラグイン開発によって切り離すことができます。異なるメンテナンスチームは特定のモジュールのビジネスのみを維持します。同時に、アプリをアップグレードすると、全体的なアップグレードを必要とせずに特定の機能モジュールのみをアップグレードできます。

2.1プラグインによって解決される問題-apkを動的にロードする方法

(1)androidクラスローダーと違い

クラスローダーの役割:Javaバイトコードは、クラスローダーを介してJava仮想マシンにロードされます。

  • PathClassLoader:ファイルディレクトリ内のapkのみをロードできます。
  • DexClassLoader:apkファイルにバイトコードをロードできます(dexエンティティjarファイルからjavaバイトコードをロードします)。主に動的ロードとホットコード更新に使用されます。

(2)リフレクション:Javaでのリフレクションにより、実行時にこのクラスの属性、メソッド、および情報メカニズムを取得できます。最も重要なことは、このオブジェクトをインスタンス化し、実行時にメソッドを呼び出すことができることです。これは、 Javaの利点。
(3)apkの動的ロードを実現します

動的読み込みapkとは:Androidには、指定されたSDカードにapkを読み込み、エージェントアクティビティを通じて実行する速度プログラムがあります。

実現:apkを呼び出すために、主にそのプロパティとメソッドを取得するためのリフレクションを通じて、apkでアクティビティを実行するためにプロキシアクティビティが必要です。
実装の原則:(类加载器クラスのロード)+ 反射(プロパティとメソッドの取得)+ 动态代理(実行)

といった:

2.2プラグインで解決すべき問題-リソースのロード方法

androidのServiceManagerクラスのhiddenメソッドを介してリソースをロードします。

2.3プラグインによって解決される問題-コードのロード方法

Javaでクラス読み込みメカニズムを使用しますが、androidとjavaも少し異なり、androidにはjavaよりも多くのコンポーネントとライフサイクルがあるため、クラスが読み込まれるときに使用できません(ライフサイクルを管理できません)。

3. Androidホットアップデート(オンラインホットリペアテクノロジー)

(1)ホットアップデートプロセス

  • 深刻なオンラインクラッシュが検出されました(参照:クラッシュを検出してサーバーにログを送信するアプリの実装)
  • オンライン版はバグ修正ブランチを引き出し、ブランチの問題を修正します
  • Jenkinsはパッチをビルドして生成します
  • アプリは適切なタイミングでパッチファイルをプッシュまたはアクティブにプルします
  • バグ修正コードをマスターにマージする

(2)ホットアップデートの主流フレームワーク

  • 露出
  • AndFix
  • 女媧

(3)ホットアップデートの原則

  • Androidクラスローディングメカニズム(クラスローダー)

PathClassLoaderクラス:システムクラスのロードに使用されます
DexClassLoader:dexファイル、jarファイルパッケージ、apkパッケージなどのロードに使用されます。

  • ホットリペアメカニズム(原理)

原則:ClassLoaderでdexElements配列を作成し、オンラインクラッシュの場所に従って対応するクラスファイルを見つけ、修復後にクラスファイルをdexファイルにパッケージ化して、dexElements配列の先頭に配置します。次に、ClassLoaderがdexElements配列をトラバースするとき(配列内のdexファイルをロードする)、ClassLoaderは最初にフロントdexファイルをロードするため、回線でクラッシュしたdexファイルはロードされず、修復されたdexファイルのみがロードされます。ロードされ、ホットリペアプロセスが完了します。

4.Androidプロセスは存続します

(1)プロセス維持の概念

プロセスの存続:プロセスを内存永久に存在させ、殺すことはできません。たとえ殺されたとしても、存続させることができます。
プロセスが強制終了された理由:人為的にkillを呼び出します。サードパーティのセキュリティソフトウェアによって強制終了されました。

プロセスの維持は不正な方法ではありません。多くのシナリオでは、次のようなサービスをユーザーに提供するための常駐プロセスが必要です。

  • スクリーンスイッチのシステムブロードキャストの受信:ブロードキャストレシーバーは静的登録をサポートしていないため、ブロードキャストレシーバーはそれを受信するプロセスで動的に登録する必要があります。常駐プロセスがない場合、ロック画面アプリケーションは通常のサービスを提供できません。ユーザー。
  • 位置情報サービス:ユーザーにタイムリーに情報(プッシュ情報/位置情報など)を伝えるためには、バックグラウンドで長い接続を維持する必要があります。

短所:プロセスはメモリ内で存続し、最適化されていても、パフォーマンスのオーバーヘッドが多かれ少なかれ増加します。そうでなければ进程保活内存消耗生き続けるために、ユーザプロセス間のバランスを見つけるために。

(2)androidプロセスの優先順位とリサイクル戦略

  • Androidプロセスの優先度:フォアグラウンドプロセス>可視プロセス>サービスプロセス>バックグラウンドプロセス>空のプロセス
  • Androidプロセスのリサイクル戦略:主にLMK(Low Memory Killer)メカニズムに依存して完了します。LMKメカニズムは、oom_adjのしきい値を使用してプロセスの優先度を判断します。oom_adjの値が高いほど、優先度が低くなり、強制終了されやすくなります。
    拓展:LMK(Low Memory Killer)メカニズムは、LinuxのOOM(Out Of Memery)メカニズムに基づいています。より複雑なスコアリングメカニズムにより、プロセスがスコアリングされ、スコアの高いプロセスが不良プロセスと判断され、メモリが強制終了されて解放されます。LMSメカニズムとOOMメカニズムの違いは次のとおりです。OOMはシステムメモリが不足している場合にのみチェックを開始しますが、LMSメカニズムは定期的にチェックします。

(3)Androidプロセスキープアライブソリューション

  • システムブロードキャストを使用してライブをプル

システムイベントが発生すると、システムは比較的応答性の高いブロードキャスト(起動、ネットワークステータスの変更、ファイルまたはSDカードのアンインストールなどの一般的なブロードキャストイベント)を送信します。ブロードキャストリスナーをmainfest.xmlファイルに静的に登録できます。
短所(起動できない状況):放送受信機は、管理ソフトウェアまたはシステムソフトウェアによって自動起動管理などの機能によって無効にされていると、放送を受信できないため、システムを自動的に起動できません。システムの放送イベントは制御できず、それだけです。インシデントが発生した場合にのみ有効にプルでき、プロセスが強制終了された直後に有効にプルされる保証はありません。

  • システムサービスメカニズムを使用してライブプル

START_STICKYサービスでonStartCommand()コールバックメソッドの戻り値を設定することにより、システムメカニズムを使用して、サービスがハングした後に自動的にアクティブ化できます。
拡張:onStartCommand()の戻り値は、サービス系统内存不足がシステムによって強制終了されると、システムメモリが十分である将来の特定の期間に、作成が成功すると、システムがサービスの作成を試みることを示します。 、onStartCommand。()メソッドをコールバックします。
短所(ライブでプルできない):サービスは、最初に異常に強制終了されてから5秒以内、2回目は10秒以内、3回目は20秒以内に再起動します(サービスが短時間で強制終了された場合)。時間が3回を超えると、システムはウェイクアップして稼働しません。root権限を取得した管理ツールまたはシステムツールによってプロセスが強制的に停止された場合、サービスメカニズムを介してプロセスを再開することはできません。

  • ネイティブプロセスを使用してライブプル

アイデア:Linuxのフォークメカニズムを使用してネイティブプロセスを作成します。ネイティブプロセスはメインプロセスの存続を監視できます。メインプロセスがハングアップすると、ネイティブプロセスはすぐにメインプロセスを有効にできます。
ネイティブプロセスでメインプロセスの強制終了を監視する方法:ネイティブプロセスでは、エンドレスループまたはタイマーを介してポーリングすることでメインプロセスが強制終了されていることを確認できますが、このソリューションは時間とリソースを消費します。メインスレッドのファイルを作成し、メインプロセスでファイルロックを保持します。プルプロセスの開始後、ファイルロックの申請はブロックされます。ロックが正常に取得されると、メインプロセスはハングアップします。
ネイティブプロセスでメインプロセスを有効にプルする方法:主にamコマンドを使用して有効にプルします。
:android5.0以降、システムはネイティブプロセスの管理を強化し、ネイティブプロセスを使用してライブをプルする方法が失敗しました。

  • JobSchedulerメカニズムを使用してライブプル

説明:Androidは、5.0以降のJobSchedulerインターフェースを提供します。このインターフェースは、メインプロセスの存続を監視し、プロセスを存続させることができます。

  • アカウント同期メカニズムを使用してアクティブ化します(有効期限が切れています)

説明:Androidシステムのアカウント同期メカニズムは定期的にアカウント情報を同期します。このソリューションは主にアカウント同期メカニズムを使用してプロセスをアクティブ化します。ただし、最新のAndroidバージョンではアカウントの同期メカニズムが変更されており、この方法が有効でなくなる可能性があります。

総括する

【Android開発詳細知識ポイントマインドマップ(スキルツリー)】

実際、Androidの開発には非常に多くの知識があり、インタビューで尋ねるべきことがまだいくつかあります。したがって、これらの知識ポイントにどれだけ準備しているかを確認するためだけに、面接のための他のトリックはありません。したがって、面接に出かけるときは、レビューでどの段階に到達したかを確認することをお勧めします。

Androidはこれまでほど熱くはありませんが、4つの主要なコンポーネントで高給の仕事を見つける時代は過ぎ去りました。これは、Androidの中間レベルより下のポジションが飽和状態にあることを示しているだけです。現在、シニアエンジニアはまだ比較的不足しています。多くのシニアポジションは非常に高い給与を支払っています(お金が多いと適切なポジションを見つけることができない場合があります)。私はシニアエンジニアになるよう努めています。最も重要です。

ここに添付されているのは、上記のインタビューの質問、JD.com、Xiaomi、Tencent、Toutiao、Ali、Meituan、およびその他の企業からの19年間のインタビューの質問に関連する数十のByteDanceのセットです。技術的なポイントは、知識と多くの詳細を含め、ビデオとPDFにまとめられています(実際、予想よりも多くの労力を要しました)。

スペースに限りがございますので、ごく一部を写真でお見せいたします。

詳細な配置については、下の青いフォントをクリックして、情報の完全版を入手することができます。

上記のすべての情報と「モバイル開発アーキテクト研究ノート」の完全版を入手するには、私をクリックしてください

インターネット上にはAndroidの学習資料がたくさんありますが、学習した知識が構造化されておらず、問題が発生した場合は、それを味わうだけで、深く学習することはありません。実際の技術的改善を達成することは困難です。この体系的な技術システムが方向性の参考になることを願っています。

おすすめ

転載: blog.csdn.net/BUGgogogo/article/details/113243637