Оптимизация производительности Android Планирование задержки - PullRequest
1 голос
/ 02 мая 2019

У меня есть ViewPager в Activity с каждым фрагментом, содержащим 4,5 TextInputLayouts. При открытии активности с NavigationMenu это вызывает небольшую задержку перед открытием активности. Я взял systrace, чтобы выяснить, что происходит. Большую часть времени я получаю некоторые проблемы, сообщая Scheduling Delays. Хотя я изучал задержки планирования, но я не могу понять, что я делаю неправильно со своей стороны, так как я просто раздуваю макеты, и в потоке пользовательского интерфейса не выполняется никакой фон или другая тяжелая работа, Ниже приведена задержка планирования в systrace

.
Running 
85.094 ms
Not scheduled, but runnable 
1.949 ms
Blocking I/O delay  
0.259 ms
Sleeping    
13.885 ms
Frame   
Description 
Work to produce this frame was descheduled for several milliseconds, contributing to jank. Ensure that code on the UI thread doesn't block on work being done on other threads, and that background threads (doing e.g. network or bitmap loading) are running at android.os.Process#THREAD_PRIORITY_BACKGROUND or lower so they are less likely to interrupt the UI thread. These background threads should show up with a priority number of 130 or higher in the scheduling section under the Kernel process.

cpu profiler

Также в systrace поступают оповещения Inefficient View alpha usage из-за HeiglightView, которого я не могу найти в иерархии представления моего макета, и я нигде не использую его.

view name   
"HighlightView"
width   
990
height  
55
HighlightView alpha caused saveLayer 990x55 took 0.01ms
Description 
Setting an alpha between 0 and 1 has significant performance costs, if one of the fast alpha paths is not used.

Файл макета

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">


    <androidx.core.widget.NestedScrollView android:layout_width="match_parent"
                                           android:layout_height="wrap_content">

        <androidx.constraintlayout.widget.ConstraintLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

            <TextView
                    android:id="@+id/attach_image"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:textAllCaps="true"
                    android:drawableEnd="@drawable/ic_cloud_upload"
                    android:drawableRight="@drawable/ic_cloud_upload"
                    android:gravity="center_vertical"
                    android:text="@string/attach_image_to_upload" app:layout_constraintTop_toTopOf="parent"
                    app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginTop="16dp" android:layout_marginLeft="16dp" android:layout_marginStart="16dp"
                    android:layout_marginRight="16dp" android:layout_marginEnd="16dp"/>

            <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:id="@+id/creator_name"
                    app:validation_key="@string/validator_non_empty"
                    app:hintAnimationEnabled="false"
                    app:layout_constraintTop_toBottomOf="@+id/attach_image"
                    android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginLeft="16dp" android:layout_marginStart="16dp"
                    app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"
                    android:layout_marginRight="16dp" android:layout_marginTop="16dp">

                <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:inputType="text"
                        android:maxLength="400"
                        android:maxLines="1"
                        android:hint="@string/creator_name"/>
            </com.google.android.material.textfield.TextInputLayout>


            <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:id="@+id/survey_name"
                    app:validation_key="@string/validator_non_empty"
                    app:hintAnimationEnabled="false"
                    app:layout_constraintTop_toBottomOf="@+id/creator_name"
                    android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginLeft="16dp" android:layout_marginStart="16dp"
                    app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"
                    android:layout_marginRight="16dp" android:layout_marginTop="16dp">

                <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:inputType="text"
                        android:maxLength="400"
                        android:maxLines="1"
                        android:hint="@string/survey_name"/>
            </com.google.android.material.textfield.TextInputLayout>


            <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:id="@+id/order_number"
                    app:hintAnimationEnabled="false"
                    app:validation_key="@string/validator_non_empty"
                    app:layout_constraintTop_toBottomOf="@+id/survey_name"
                    android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginLeft="16dp" android:layout_marginStart="16dp"
                    app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"
                    android:layout_marginRight="16dp" android:layout_marginTop="16dp">

                <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:maxLength="400"
                        android:inputType="number"
                        android:maxLines="1"
                        android:hint="@string/order_number"/>
            </com.google.android.material.textfield.TextInputLayout>


            <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:id="@+id/prize"
                    app:validation_key="@string/validator_non_empty"
                    app:hintAnimationEnabled="false"
                    app:layout_constraintTop_toBottomOf="@+id/order_number"
                    android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginLeft="16dp" android:layout_marginStart="16dp"
                    app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"
                    android:layout_marginRight="16dp" android:layout_marginTop="16dp">

                <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:inputType="text"
                        android:maxLength="400"
                        android:maxLines="1"
                        android:hint="@string/prize"/>
            </com.google.android.material.textfield.TextInputLayout>

            <com.google.android.material.textfield.TextInputLayout
                    android:layout_width="0dp"
                    android:id="@+id/description"
                    app:validation_key="@string/validator_non_empty"
                    app:hintAnimationEnabled="false"
                    app:layout_constraintTop_toBottomOf="@+id/prize"
                    android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="parent"
                    android:layout_marginLeft="16dp" android:layout_marginStart="16dp"
                    app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="16dp"
                    android:layout_marginRight="16dp" android:layout_marginTop="16dp" android:layout_marginBottom="16dp"
                    app:layout_constraintBottom_toBottomOf="parent">

                <com.google.android.material.textfield.TextInputEditText
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:inputType="text"
                        android:gravity="start"
                        android:maxLength="400"
                        android:maxLines="1"
                        android:imeOptions="actionDone"
                        android:hint="@string/description"/>
            </com.google.android.material.textfield.TextInputLayout>

        </androidx.constraintlayout.widget.ConstraintLayout>
    </androidx.core.widget.NestedScrollView>

</layout>

Просмотр иерархии

view hierarchy

...