2016-03-27 21 views
0

私は117TableRowsに追加したいTableLayoutに追加したいのですが、問題は遅くなりますActivity発売?私はTableRowをバックグラウンドで作成しようとしましたが、次にpublishProgress行のチャンクがあるので、同時にすべての行を追加しても問題は発生しないかもしれませんが、まだ起動時にがあります。私がこれまで行ってきたことは、次のとおりです。Tablelayout addViewが遅くなるアプリケーション

117 TableRowsを追加することは、事前に活動

感謝を遅くしないようにTableLayout addViewのパフォーマンスを向上させる方法

private class AsyncTaskLoadData extends AsyncTask<Void, CopyOnWriteArrayList<TableRow>, ArrayList<TableRow>> { 


     protected void onPreExecute() { 
      showProgressDialog(); 
      tableLayout.setVisibility(View.GONE); 
     } 


     @Override 
     protected void onProgressUpdate(CopyOnWriteArrayList<TableRow>... values) { 
      super.onProgressUpdate(values); 
      for (TableRow tr : values[0]) { 
       tableLayout.addView(tr); 
      } 
     } 
     protected ArrayList<TableRow> doInBackground(Void... params) { 


      CopyOnWriteArrayList<TableRow> arr_rows = new CopyOnWriteArrayList<>(); 
      TableRow row = null; 
      for (int i = 0; i < statementSummaryMainReports.size(); i++) { 
       StatementSummaryMain report = statementSummaryMainReports.get(i); 
       row = printRows(report); 
       arr_rows.add(row); 
       if(i%25==0) { 
        publishProgress(arr_rows); 
        arr_rows.clear(); 
       } 

      } 

      publishProgress(arr_rows); 
      return null; 
     } 



     protected void onPostExecute(ArrayList<TableRow> result) { 
      tableLayout.setVisibility(View.VISIBLE); 
      hideProgressDialog(); 
     } 
    } 

答えて

0

117 TableRowsを作成することは非常に悪い設計です。これらの行を持つTableLayoutは多くのメモリを占めているため、アンドロイドはリサイクルビューを使用するウィジェットを提供しています。 RecyclerViewまたはListViewの複数のビュータイプを使用することを検討する必要があります。このアプローチでは、可視的なビューまたは他の言葉で必要なビューだけがメモリをとり、描画されます。したがって、可視のビューのみが初期化されているため、セットアップ時間は非常に短くなります。

+0

私はそれが悪いデザインだと知っていますが、実際にはテーブルレイアウトを使用する必要があります。 –

+0

したがって、スレッドプールではなく、スレッドプールを使用してください。 –

関連する問題