我想要在117
中添加TableRows
TableLayout
,问题是Activity
启动速度慢了吗?我尝试在后台创建TableRow
,然后在publishProgress
行创建行,以便同时添加所有行可能不会导致问题,但我仍然有lag
个发射,市场投入。到目前为止我所做的是以下内容:
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();
}
}
如何提高TableLayout addView的性能以便添加 117 TableRows不会减慢活动
提前致谢。
答案 0 :(得分:0)
创建117 TableRows
是一个非常糟糕的设计。因为带有这些行的TableLayout
占用了大量内存,因此android提供了使用回收视图的小部件。您必须考虑将RecyclerView或ListView与多种视图类型一起使用。使用这种方法只有可见视图或换句话说只有必要的视图占用内存并被绘制。因此,设置时间将非常短,因为只有可见视图正在初始化。