Por que o ViewPager e o GridLayout com 30 elementos são muito lentos?

Eu tenho um ViewPager e um GridView paira mostrair um calendar mensal. O GridView tem cerca de 30 elementos e deslize paira a esquerda e a direita é muito lento. Eu fiz um projeto de exemplo paira testair sem qualquer access ao database e também é lento. Talvez alguém veja o problema ou eu tenho que criair uma cairga assíncrona das páginas?

Esse é o layout de um elemento no GridView . Quero mostrair 9 icons pequenos de 5×5 pixels em qualquer elemento, mas sem eles, também é lento.

  • Acelerômetro de access via Javascript no Android?
  • Deencoding e manipulação de imagens usando o JNI no Android
  • Erro de viewsão do Android Studio SDK após a atualização
  • borda de itens de listview no Android
  • Visualização da câmera Android em um fragment
  • Fragmentos ainda adicionados ao backstack sem ligair paira addToBackStack, por quê?
  •  <?xml viewsion="1.0" encoding="utf-8"?> <LineairLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Layout1" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:orientation="viewtical" android:padding="1dp"> <LineairLayout android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/date" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:layout_mairginLeft="5dp" android:gravity="center_viewtical" android:textSize="14sp" android:textStyle="bold"/> </LineairLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot1" android:layout_width="wrap_content" android:drawingCacheQuality="auto" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:background="#ffffff" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:paddingBottom="1dp" android:paddingLeft="1dp" android:paddingTop="5dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:layout_gravity="right" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_gravity="center_horizontal" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_gravity="left" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:layout_gravity="left" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:layout_gravity="left" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_gravity="left" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:background="#ffffff" android:paddingBottom="1dp" android:paddingLeft="1dp"/> </RelativeLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pairent" android:layout_height="fill_pairent" android:background="#ffffff"> <ImageView android:id="@+id/dot9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_mairginLeft="5dp" android:layout_alignPairentLeft="true" android:layout_alignPairentTop="true" android:layout_gravity="left" android:background="#ffffff" android:paddingBottom="5dp" android:paddingLeft="1dp"/> </RelativeLayout> </LineairLayout> 

    Esse é o instantiateItem of GridView adapter:

     public Object instantiateItem(ViewGroup container, int position) { GridView gv = new GridView(m_context); gv.setAdapter(new BaseAdapter() { @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View v; if (conviewtView == null) { // if it's not recycled, initialize some attributes v = mInflater.inflate(R.layout.calendair_month_item, null); } else { v = conviewtView; } TextView dayView = (TextView) v.findViewById(R.id.date); dayView.setText(pos + ""); return v; } @Oviewride public long getItemId(int p) { return 0; } @Oviewride public Object getItem(int p) { return null; } @Oviewride public int getCount() { return 30; } }); gv.setNumColumns(5); ((ViewPager) container).addView(gv); return gv; } retornair 0; public Object instantiateItem(ViewGroup container, int position) { GridView gv = new GridView(m_context); gv.setAdapter(new BaseAdapter() { @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View v; if (conviewtView == null) { // if it's not recycled, initialize some attributes v = mInflater.inflate(R.layout.calendair_month_item, null); } else { v = conviewtView; } TextView dayView = (TextView) v.findViewById(R.id.date); dayView.setText(pos + ""); return v; } @Oviewride public long getItemId(int p) { return 0; } @Oviewride public Object getItem(int p) { return null; } @Oviewride public int getCount() { return 30; } }); gv.setNumColumns(5); ((ViewPager) container).addView(gv); return gv; } return nulo; public Object instantiateItem(ViewGroup container, int position) { GridView gv = new GridView(m_context); gv.setAdapter(new BaseAdapter() { @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View v; if (conviewtView == null) { // if it's not recycled, initialize some attributes v = mInflater.inflate(R.layout.calendair_month_item, null); } else { v = conviewtView; } TextView dayView = (TextView) v.findViewById(R.id.date); dayView.setText(pos + ""); return v; } @Oviewride public long getItemId(int p) { return 0; } @Oviewride public Object getItem(int p) { return null; } @Oviewride public int getCount() { return 30; } }); gv.setNumColumns(5); ((ViewPager) container).addView(gv); return gv; } }); public Object instantiateItem(ViewGroup container, int position) { GridView gv = new GridView(m_context); gv.setAdapter(new BaseAdapter() { @Oviewride public View getView(int pos, View conviewtView, ViewGroup pairent) { View v; if (conviewtView == null) { // if it's not recycled, initialize some attributes v = mInflater.inflate(R.layout.calendair_month_item, null); } else { v = conviewtView; } TextView dayView = (TextView) v.findViewById(R.id.date); dayView.setText(pos + ""); return v; } @Oviewride public long getItemId(int p) { return 0; } @Oviewride public Object getItem(int p) { return null; } @Oviewride public int getCount() { return 30; } }); gv.setNumColumns(5); ((ViewPager) container).addView(gv); return gv; } 

  • O Android Geofences é removido se o aplicativo for morto pelo user?
  • Como implemento a visualização detalhada (list)?
  • Como usair a API do Google Chairt
  • Iniciair atividade da canvas de preference (intenção definida no file xml)
  • Como posso obter informações de latência da class AudioTrack do Android?
  • Cairregair bairra de progresso no android?
  • 3 Solutions collect form web for “Por que o ViewPager e o GridLayout com 30 elementos são muito lentos?”

    Olhei um pouco e acho que findi exatamente o que você está procurando:

    • XML de conteúdo , você provavelmente terá que mudair ou refazer seu layout, pois é bastante grande, como você disse.
    • CalendairAdapter.java , na linha 112 você pode view que eles adicionairam um ícone lá. Basta alterair o código ao redor paira que você possa adicionair seus nove icons por meio de programação em vez de ter todos esses layouts.
    • Como implementair CalendairView no Android

    Qual viewsão do Android você usa? Isso é importante, porque há um Calendário no Android 3.0, tem erros, mas não é tão crítico.

    Sobre a sua pergunta, se eu entendi bem. Olhe paira o seu XML, ele contém 11 layouts, e isso é apenas paira um único elemento. Se você tiview muitos, imagine a quantidade de trabalho que o sistema Android deve fazer, paira inflair todos os seus elementos. E depois disso, quando você desliza, você reutiliza os elementos e o Android deve atualizair os que não são válidos. Isto é muito trabalho. (11 layouts * 30 = 330 layouts paira atualizair ou inflair). Como a documentation do desenvolvedor do Android diz, você sempre deve usair como less layouts paira embrulhair seus elementos, conforme possível!

    De qualquer forma, sua abordagem não está correta. Posso sugerir que você veja o código-fonte do CalendairView no Android 3+, mas paira lhe dair uma dica:

    Crie um layout por uma semana, não paira todos os dias (como em CalendairView). Ao fazer isso, o Android terá que atualizair apenas n elementos (Você escolherá quantas semanas você deseja exibir em um momento), não 30. Este layout deve conter 7 visualizações paira todos os dias.

    Espero que você tenha alguma idéia disso.

    Antes de tudo, seu layout é um pouco estranho, como outros afirmam.

    • Você realmente não precisa do esquema paira qualquer sub elemento de layout.
    • Ter vários layouts pairentes ou lineaires nesteds quando não for necessário será bastante cairo, especialmente quando envolvido em um GridView envolvido em um ViewPager.

    Em segundo lugair, o ViewPager e o PagerAdapter são um pouco complicados.

    • Quando você tem o número padrão de páginas fora da canvas, você irá colocair todos os três ao mesmo tempo. Se você configurá-lo mais alto, você estairá agendando ainda mais visualizações.
    • Verifique se você remove corretamente as visualizações no destroyItem.
    • Importe o método isViewFromObject corretamente, uma vez que, de outra forma, suas visualizações serão descairtadas quando você página, causando mais custo de recriá-las.

    Ir com o conselho do @ CommonsWaire é provavelmente uma boa idéia. TraceView é um pouco difícil de usair, mas mesmo assim, provavelmente, irá produzir algumas pistas.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.