最新の Android 開発: パフォーマンスの監視

この記事は、開発の最新化に関するAndroidシリーズの 7 番目です。

完全な目次は次のとおりです。

パフォーマンスの最適化は、開発において決して避けては通れないテーマであり、マスターになるための唯一の方法でもあります。しかし、パフォーマンス最適化の前提は完全なパフォーマンス監視システムを構築することであり、大企業は完全な監視システムを構築するために人的資源を投資しますが、中小企業は大企業が提供するプラットフォームや SDK しか使用できませんAPM。パフォーマンスの最適化を行う時間がありません。したがって、この分野での成長という点では、数年前に遡る必要があり、大企業で実践する機会を得ることができます。しかし、現在は必要なAPMシステムがすべて整っており、メンテナンスが主な焦点となっています。外部のSDKウェブサイトやプラットフォームはある程度の料金を課そうとしており、中小企業がデータ分析を検討できる場所は少なくなっています。

学習する場合は、Geek Time の Zhang Shaowen 氏による「Android Development Master Class」が非常にお勧めの学習リソースです。クラッシュ、メモリ、IO、ストレージ、ネットワーク、起動、パッケージ サイズ、UI などの側面がカバーされています。深い。また、上司はオンライン監視にも細心の注意を払い、問題の早期発見と対処に努めています。

ビジネス開発者として、もちろん、基礎となる各レイヤーの実装については説明しませんが、さまざまなライブラリやツールを使用して独自の監視目的を完了するため、この記事では主にビジネス レイヤーで使用できるツールについて説明します。

報告

大手プラットフォームではSDK、収集からレポート、分析までを請け負った大規模かつ完全なパッケージが提供されており、ユーザーにとっては数行のコードの問題であるため、課金するのが合理的ですが、小規模な企業であれば、必要ありません、お金を与えることは不可能です。そこで私は、即時レポートやバッチ レポートなどの動作ロジックをカプセル化し、バックエンドで使用できるemo汎用レポート ライブラリを で開発しました。これは、ビジネス データ レポートの一部として監視を使用するためです。また、これは一般的なレポート ライブラリであるため、ユーザーはデータ プロトコルをカスタマイズする必要があります。そのため、以前に計画されていた開発の 1 つは、さまざまな監視データ プロトコルをカスタマイズし、バックエンドのサポートを提供することですが、これは単なる意図的で無力であり、そのようなスケジュールはありません。reportPrometheusreportemodocker

クラッシュ

Crash、、、ANRおよびはOOM最も懸念される監視対象である必要があります。java上位レベルの捕捉は簡単ですcrashが、難しいのはnative上位レベルの例外であり、捕捉が難しく、捕捉できない可能性があります。そのため、詳細なcrash情報を取得するには、全員が複数のモニターに同時にアクセスする場合がありますSDKBugly結局のところ、無料であるため、現時点ではまだ一般的である可能性があります。しかし、Android最終的SDKには iQIYI のオープンソースがおそらく最高なのでxCrash、学びたい場合はそのソースコードを読むのが非常に良い方法です。

Bugly追加のログ ファイルのサポートはあまり良くありませんが、ログ ファイルがたくさんあるためcrash、例外の原因を見つけるためにログにアクセスすることがよくあります。したがって、現時点では、私自身の例外レポートの解決策は、それを使用しxCrashcrashログのコピーをレポートすることです。

除此之外,官方也在 Android 11 提供了 App Exit Reasons 这个 API, 用于我们获取用户是因为什么情况退出应用的,目前,应该主流的手机都升级到 11 以上了吧,所以它也可以用起来了,而且它的 reason 还包括 REASON_LOW_MEMORYREASON_EXCESSIVE_RESOURCE_USAGE 等众多原因,作为数据分析,也是非常有用的。

内存泄漏

内存泄漏目前的主流分析工具就是 LeakCanary 了,所以 App 怎么也得接入下,这个也是面试官非常喜欢问的问题了,属于面试必备了,了解下其实现原理也是很有必要的。

网络监控

网络监控主要是两个点,一个是上下行流量的监控,防止开发写了有问题的代码,出现在循环内疯狂请求后台的情况,除了会给后台压力,也容易被用户投诉。emonetwork 做了一个简易的上下行流量的采样,可以一段时间采样一次,看是否出现突发流量的情况。

另一个就是网络连接稳定、耗时的监控了,由于目前基本上都是 OKHttp 了,所以直接使用它提供的 EventListener 就足够用了,就可以把 ssl 握手时间、dns 时间、connect 时间等都统计下来。网络请求一般是非常多的,一般客户端需要先聚合下再上报给后台。

卡顿监控

卡顿监控,以前基本上就是以下两种方案:

  • Choreographer 回调
  • Looper 自定义 Printer

我们可以使用微信的 Matrix 来监控卡顿,其实现方案是基于 Looper 来做的。

后面系统提供了 FrameMetrics 接口,然后 jetpcak 开发了库 Metricsjetpack 的实现保证了良好的兼容性,可惜目前稳定版还没到来,估计以后它就是主流了。

启动监控

起動の最適化も重要なテーマであり、初回起動に時間がかかるとユーザーは使用を諦めてしまう可能性があります。最初のインストール後のアプリの起動時間を最適化するために、Google Play大きなキラーを採用できます。Baseline Profileただし、国内メーカーは今のところフォローするつもりはなく、起動に時間がかかるのはビジネス層の改善次第で、後から初期化できるものは後から初期化することになる。

WeChatMatrixでは、時間のかかる起動の監視も提供していますので、それを使用してください。

このシステムには、reportfullydrawnビジネス側がデータの読み込みが完了したことをシステムに伝えるメソッドも用意されており、起動から実際のインターフェイスに到達するまでの時間を報告できます。ただし、これは政府が提供する分析ツールのためのものであり、そのままオンライン監視に利用することはできません。

やっと

Matrix上記に加えて、遅いメソッドの検出、APK 分析、SQLite 検査、コンピューターの最適化、メモリ重複イメージの検出、IO 検出なども含まれます。海外であればFirebase Crashlyticsネットショッピングなどの各種公式サービスを利用することができます。

これらのテクノロジーを本当に学びたい場合は、xCrashLeakCanary、およびMatrixソース コードを参照してください。すべての知識はそこに含まれています。しかし、それには膨大な時間の投資が必要です。しかし、仕事に圧迫されて息もできず、暇な時間はどこにあるのでしょうか?誰もがビジネスに関わっており、この種のパフォーマンスの最適化は常に無期限に延期され、実践する機会は決してありません。

常に無限の技術的負債を抱え、要件を何度も変更する前にひざまずき、重荷を負ってひざまずくプログラマーのような生活を送り、時には過去から学ぶために失われてしまった基本的なコンピューター知識を調べます。

この一連の記事はこれで終わりですが、Composeページをまたいだコミュニケーション、Text行の高さの変更、その他の知識など、いくつかのスキルや詳細についての議論と考え方を引き続き更新していきます。

おすすめ

転載: juejin.im/post/7258850712191238199