問題タブ [android-traceview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android traceview非同期イベント
traceview を使用して、いくつかの非同期イベントのパフォーマンスを測定したいと考えています。非同期イベントは、以下のコードのようなコールバックで渡されます。
ここで、すべての非同期イベントは「onStartEvent」呼び出しで開始され、「onStopEvent」呼び出しで終了します。
イベントごとにトレース ファイルを作成したいと考えています。ここ ( http://developer.android.com/tools/debugging/debugging-tracing.html#creatingtracefiles ) を読んだところ、呼び出しの順序は「スタック」で「構造化」する必要があるため、非同期イベントをトレースすることはできません。 「注文みたい。したがって、「Debug.stopMethodTracing()」への呼び出しは常に「Debug.startMethodTracing("calc");」への最新の呼び出しに適用されます。
したがって、次の順序でコールバックを受信するとします。
onStartEvent(A)
onStartEvent(B)
onStopEvent(A)
onStopEvent(B)
これはに解釈されます
Debug.startMethodTracing("A");
Debug.startMethodTracing("B");
Debug.stopMethodTracing(); // "A" ではなく "B" に適用されます
Debug.stopMethodTracing(); // "B" ではなく "A" に適用されます
トレースビューを使用して、とにかく私がやりたいことはありますか? つまり、「構造化されていない」非同期イベントをトレースしますか?
android - Android: Traceview と Genymotion でプロファイリングするとき、.trace ファイルはどこにありますか?
Android アプリで traceview を実行する方法について、こちらの記事を読んでいます: https://developer.android.com/studio/profile/traceview.html私が使用しているものです。
トレース ファイルをエミュレータからホスト マシンにプルするように指示されています。次のコマンドを実行するだけです。
Genymotion エミュレーターで実行しましたが、ファイルが見つかりませんでした。次に、Android Device Monitor を使用してデバイス内のファイルを調べましたが、その場所に startup.trace というファイルが保存されていませんでした。
私は自分のコードでこれを行いました:
次に、アクティビティの onResume メソッドで stopTracing を実行して、アプリの起動時間を測定しました。
traceview で起動時間を測定したいのですが、Genymotion エミュレーターでファイルが保存されている場所がわかりません。ファイルの保存場所を教えてくれる人はいますか?
android - Android Traceview (サンプリング ベースのトレース) に実際の関数呼び出し数が反映されない
5 秒ごとに実行されるアプリ内の関数をプロファイリングしています。ただし、トレース ビューの [Calls + Rec/Total] オプションには、通話の半分しか表示されません。サンプリング間隔として 1 マイクロ秒のサンプルベースのプロファイリングを使用しています。このサンプリング レートで試してみましたが、目に見える改善は見られませんでした。たとえば、ビューを 236 秒間実行すると、[Call + Rec/Total] オプションで 47 の呼び出しが表示されるはずですが、下の図に示すように 20 しか表示されません。誰かが私が間違っていることについてコメントできますか?
更新: @kws との話し合いに基づいて、2 番目の Samsung (元々は Android 5.1.1 を使用) に Android 4.4.4 をインストールしましたが、現在はサンプリング ベースの方法で問題なく動作しています。ただし、Android 6.0.1 を搭載したスマートウォッチは、依然としてトレース ビューで古い方法で動作しています。
更新 2: サンプリング ベースの方法では、非常に軽量な関数をキャプチャする解決策がないと思います。これらの関数は 2 つのサンプル間で実行され、このプロファイラーでは見逃される可能性があるためです。サンプリング間隔はマイクロ秒単位でデータを記録していますが、ここまで細かい粒度まで到達できるとは思えません。この引数の背後にある理由は、非常に軽量な関数をテストしたときに、すべての呼び出しが 3 つのデバイスすべてでキャッチされたわけではないということです。
java - アプリケーションの起動時間が長い
アプリケーションの起動時間に問題があります。アプリを起動すると (メイン アクティビティを起動)、アプリが最終的に表示されるまでに約 3 ~ 4 秒かかりました。onCreate メソッドからすべてを削除したため、単純な LinearLayout を設定する setContentView(R.layout.activity_main) のみが含まれています。MainActivity には、複雑なレイアウト構造やその他の重いコードはありません。
起動時間を記録するために、次の出力が得られる両方の adb shell コマンドを使用しました。
また、TraceView:
私は TraceView にあまり詳しくないので、出力の多くは理解できませんが、「bindApplication」の部分には長い時間がかかります。また、アプリケーションに必要な gradle ファイルにいくつかのライブラリをインポートしました。これらは起動時間に影響する可能性があります。
私のアプリケーションが表示されるまでに時間がかかる理由を知っている人はいますか?
編集: MainActivity