Как сделать addView () дешевле - PullRequest
1 голос
/ 28 апреля 2019

У меня есть действие, которое измеряет, сколько времени занимает анимация / разметка / мера / и т.д. разметки.

class RenderingMeasureActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.skeleton)

        val view = layoutInflater.inflate(R.layout.simple, root, false)
        root.postDelayed({
            root.addView(view)
        }, 5000)
    }
}

Макет скелета - это не что иное, как FrameLayout с match_parent и id root. Простое расположение просто:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="ahoj"
        android:textSize="32sp" />

</FrameLayout>

В упражнении я задержал addView(), поэтому я уверен, что я измеряю только это, и никакого другого влияния здесь нет.

Теперь, что бы я ни делал, измерения выходят за рамки. Это занимает не менее 17 мс (в среднем больше, как 25 мс), что является определенным источником JANK (> 16,7 мс). Самая длинная продолжительность - это командная ошибка, и я получаю те же результаты от FrameMetrics, панелей профилирования GPU и аналогичной длительности, также от systrace .

Что я делаю не так? Возможно ли, что addView (или inflate) из любого макета будет настолько дорогим, что приложения Android SDK всегда будут иметь JANK? Почему, если такой же макет (объединенный в один) установлен в setContentView(), это займет меньше времени (хотя и не намного)?

П.С .: Я пробовал другие макеты, такие как ограничение, линейное, относительное. Тег слияния помогает немного , но не всегда пригоден для использования.
P.P.S .: Создание макета программно не имеет никакого эффекта, так как я разделил надувную часть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...