Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
gigs
8 / 9 / 1
Регистрация: 21.12.2011
Сообщений: 397
#1

Как избежать skipped frames ? - Программирование Android

31.12.2015, 20:30. Просмотров 216. Ответов 1

Добрый день, помогите решить проблему, я создал метод table() который генерирует таблицу. Вот код:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public void table(){
    ScrollView scrollView = new ScrollView(this);
    HorizontalScrollView horizontalScroll = new HorizontalScrollView(this);
    TableLayout tableLayout = new TableLayout(this);
    tableLayout.setBackgroundColor(Color.BLACK);
 
    LayoutParams cellsParam = new LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT);
    cellsParam.setMargins(1, 1, 1, 1);
 
    for(int i = 0; i < 600; i++){
        TableRow row = new TableRow(this);
            TextView wayTextView = new TextView(this);
            wayTextView.setText("text" + i);
            wayTextView.setBackgroundColor(Color.WHITE);
            wayTextView.setGravity(Gravity.CENTER);
            row.addView(wayTextView, cellsParam);
 
            tableLayout.addView(row);
        }
    horizontalScroll.addView(tableLayout);
    scrollView.addView(horizontalScroll);
    setContentView(scrollView);
}
Проблема в том, что когда я его вызываю в onCreate(), в логах появляется сообщение: I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread."

В гугле я узнал что для избежания подобного сообщения нужно использовать AsyncTask, но я не знаю как в AsyncTask реализовать создание таблицы не в UI потоке. Я не могу вызвать метод table() в doInBackground(), потому что тогда мне будет выдавать ошибку "Only the original thread that created a view hierarchy can touch its views", но я так же не могу вызвать метод table() в onPreExecute() или в onPostExecute() потому что опять получу skipped frames.

Посоветуйте что можно сделать ? а то я же третий день голову ломаю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2015, 20:30     Как избежать skipped frames ?
Посмотрите здесь:
Android ListView with buttons in DialogFragment skiped frames
Android Как избежать наложения друг на друга textview
После гибернации эмулятор ест 100% проца - как избежать? Android
Web-камера: при проигрывании потока- маленький fps(frames per second), как его менять C#
C++ Ошибка initialization of 'element' is skipped by 'case' label
Не компилируются проекты: Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped C++
Linked List: error C2360: initialization of 'vp' is skipped by 'case' label C++
Ошибка: error C2360: initialization of 'mat_C' is skipped by 'case' label C++
Frames Delphi
C++ Builder Frames
Frames Delphi
Web Frames

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
31.12.2015, 21:55     Как избежать skipped frames ? #2
вместо табличного лаяута использовать RecyclerView или ListView, но лучше первое
горизонтальный список можно сделать так как и вертикальный, отличие в паре строк
Java
1
2
3
4
LinearLayoutManager layoutManager
    = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
RecyclerView rv = (RecyclerView) findViewById(R.id.recyclerView);
rv.setLayoutManager(layoutManager);
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru