gpt4 book ai didi

android - ListActivity性能问题

转载 作者:行者123 更新时间:2023-12-03 18:17:19 26 4
gpt4 key购买 nike

我的ListActivity遇到严重问题。当我打开它并开始滚动时,该应用程序冻结了几秒钟,之后可以平滑滚动。我没有收到“应用程序无响应”错误。我做了一个*.hprof堆转储,并将其放入MAT中。在这里您可以看到我的泄漏:


好像有些东西是鱼。也许我没有以正确的方式使用光标。
在这里,您可以看一下我的代码:

public class ListViewActivity extends ListActivity implements OnClickListener {

// Resources
static String like;

// Cursor
private SimpleCursorAdapter adapter;
private Cursor cursor;
String[] showColumns;
int[] showViews;

// Database
private DBAccess dbAccess;

@Override
public void onCreate(Bundle savedInstanceState) {
// Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);

ListViewActivity.like = "";
Intent intent = getIntent(); // gets the previously created intent
ListViewActivity.like = intent.getStringExtra("like");

new DatabaseTask().execute(null, null, null);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Cursor item = (Cursor) getListAdapter().getItem(position);
Intent intent = new Intent(ListViewActivity.this, ListClickActivity.class);
intent.putExtra("id", item.getString(0));
startActivity(intent);
}

private class DatabaseTask extends AsyncTask<Void, Void, Void> {

@Override
protected Void doInBackground(Void... params) {
Log.v("doInBackground", "started!");

dbAccess = new DBAccess(ListViewActivity.this, 1, "FishingMatey.db");

dbAccess.initDownloadedDatabase();

cursor = dbAccess
.createBewirtschafterListViewCursor(ListViewActivity.like);

showColumns = new String[] { "gewName", "reviergrenzen" };
showViews = new int[] { R.id.datensatz_gewName,
R.id.datensatz_reviergrenzen };

Log.v("doInBackground", "finished!");

return null;
}

protected void onPostExecute(Void params) {
adapter = new SimpleCursorAdapter(ListViewActivity.this,
R.layout.datensatz, cursor, showColumns, showViews);

setListAdapter(adapter);

dbAccess.closeDatabase();

Log.v("onPostExecute", "finished!");
}
}
}

编辑1:
该问题并非来自数据库,因为我的以下代码存在相同的泄漏:
public class ListViewActivity extends ListActivity {
// Activity
public static Activity forFinish;

// Resources
static String like;

// Cursor
private SimpleAdapter adapter;
String[] showColumns;
int[] showViews;

@Override
public void onCreate(Bundle savedInstanceState) {
// Remove title bar
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);

forFinish = this;

ListViewActivity.like = "";
Intent intent = getIntent(); // gets the previously created intent
ListViewActivity.like = intent.getStringExtra("like");

// create the grid item mapping

showColumns = new String[] { "gewName", "reviergrenzen" };
showViews = new int[] { R.id.datensatz_gewName,
R.id.datensatz_reviergrenzen };

// prepare the list of all records
List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();

for (int i = 0; i < 20; i++) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("gewName", "See" + i);
map.put("reviergrenzen", "Revier" + i);
fillMaps.add(map);

}
// fill in the grid_item layout

SimpleAdapter adapter = new SimpleAdapter(this, fillMaps,
R.layout.datensatz, showColumns, showViews);

setListAdapter(adapter);

}
}

如果有人可以找到内存泄漏,那将是很棒的。
问候迈克!

最佳答案

如果您在列表项中使用图像,则将图像加载移至后台任务。您可以看一下smoothie,它是一个异步加载列表,可以与Android-BitmapCache一起使用以获得更好的性能。

关于android - ListActivity性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14940160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com