私のAndroidの静止画では、ユーザーの30%がレンダリングに時間がかかります。私のアプリはかなり複雑なUIを持っているので、この問題を解決するための基本的なプロジェクトを作った。しかし、それはレイアウトの最も単純なものでさえかなり遅いことが分かります。最も基本的なレイアウトの描画が遅い
レイアウトのAndroidスタジオがテンプレートとして提供することを中心とテキストです:
Timer updateTicks = new Timer();
updateTicks.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Random r = new Random();
timerView.setText(String.format("%02d", r.nextInt(60))+":"+
String.format("%02d", r.nextInt(60)));
}
});
}
}, 100, 1000);
:
は<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="slowrenderingtest.pichaipls.com.slowrenderingtest.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timerView"
android:text="00:00"
android:textSize="40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
レイアウトを使用しての活動は、すべての2番目のテキストを変更するには、(それはタイマーだから)私がGPUプロファイリングをオンにすると、これはいくつかの低速デバイス(明らかにユーザーの30%)で各フレームを描画するのに16msの限界にかなり近づいています。ただ1つのTextView。しかしここにキャッチがあります:最初にアクティビティを実行すると、レンダリング時間は短くなりますが、数秒後にシュートアップします。私が画面に触れ続けると(画面上にコントロールがない)、レンダリング時間は低いままです。これはCPU/GPUが低電力状態になっているためです(レンダリングに時間がかかります)。
私の問題はAndroidのバイタルです。レンダリング時間が遅いという警告が表示されています(レンダリングが遅いセッションの5%を超えると警告が表示されると思いますが)これをどのように高速化できるかはわかりません。そして私はそれが私のアプリのランク付けに影響を与えるかもしれないと心配していますが、この本当に単純な例でさえ、あまりにも多くのAndroidユーザーが遅いデバイスを持っています。
これについて何かできますか?
CPUプロファイリングを実行して、どのメソッドがより多くの時間を取っているかを調べることができますか?それは 'rです。UIスレッドであまり使わないべきnextInt() 'は –
です。いいえ、' r.nextInt() 'とは関係ありません。私はちょうど増加する数字を表示する場合、問題は同じです。実際には、CPUに負担をかけると描画が高速になるようです。その代わりに乱数を生成するのではなく、その数の階乗も計算すれば、GPUの更新が遅いという問題は解決されますが、恐ろしく非効率的です。 – TimSim