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

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

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

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

31.12.2015, 20:30. Просмотров 220. Ответов 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.

Посоветуйте что можно сделать ? а то я же третий день голову ломаю.
0
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
Не сплю уже долгое время, не могу исправить ошибку. В DialogFragment лагает скролл списка и нажатия на кнопку. есть две кнопки Plus і...

Как избежать наложения друг на друга textview - Программирование Android
Есть такой layout &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; ...

После гибернации эмулятор ест 100% проца - как избежать? - Программирование Android
Добрый день! Сабж. Единственный мне известный вариант - выключать эмулятор перед гибернацией. Однако в этом случае его надо обратно потом...

Web-камера: при проигрывании потока- маленький fps(frames per second), как его менять - C#
Всем доброго времени суток! Я сейчас пишу прорамму, работающую с веб-камерой, реализуя возможности Aforge.net, там есть элемент...

C2360 initialization of 'menu' is skipped by 'case' label - C++ WinAPI
Выдает ошибку, в чем может быть проблема, не подскажите? #define WIN32_LEAN_AND_MEAN #include &lt;windows.h&gt; #include...

Ошибка initialization of 'element' is skipped by 'case' label - C++
Во первый заранее извиняюсь если не правильно создал тему, я здесь впервые и не знаю как выбрать раздел. Объясните что за ошибка и как её...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,799
Завершенные тесты: 1
31.12.2015, 21:55 #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);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2015, 21:55
Привет! Вот еще темы с ответами:

Не компилируются проекты: Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped - C++
Здравствуйте, уважаемые специалисты. Недавно начал изучать С++ Компилятор Visual C++ при попытке скомпилировать любой код выдаёт это: ...

Linked List: error C2360: initialization of 'vp' is skipped by 'case' label - C++
Программа выдает ошибку . но я не понял в чем проблема . можете помочь исправить ? class Us { public: Us* prev; int k; ...

Ошибка: error C2360: initialization of 'mat_C' is skipped by 'case' label - C++
Выдаёт такие ошибки: 1&gt;c:\users\данила\documents\visual studio 2005\projects\кур22222\кур22222\кур22222.cpp(101) : error C2360:...

Frames - Delphi
народ, подскажите, как в основной форме использовать компоненты находящиеся на фрейме? case tframecalc.SelectMap.ItemIndex of 0:...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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