我正在通过后台线程将100000条记录插入数据库。此时,当我想要加载Ui屏幕时,我会出现内存不足错误。例如,当堆大小为5MB,并且4MB分配给后台线程时,加载UI屏幕需要2MB。所以在这种情况下,我会出现内存不足的问题。请告诉我我需要在这里做些什么来解决内存不足的问题。
尝试一次插入100,而不是一次插入1000。这将大大减少后台线程的内存使用量。
如果您的记录以XML的形式来自服务器,则不要使用DOM解析器;这是一个记忆猪。请改用SAX、StAX或pull解析器。
最后,请确保在插入记录后没有保留对不需要的对象的引用。
我认为你应该使用更少的内存。。。
那一百万张唱片来自某个地方。不要一次把它们全部保存在内存中——如果你读了它们,就在读的时候把它们写进数据库——一次一块(比如说,一次1000块?)。如果你生成它们,不要一次生成所有的,而是一次生成一块。
从不同于主线程或进程的单独线程插入所有记录。使用android中的IntentService类在数据库中插入大量条目,这不会影响您的UI。例如:
public class BackgroundService extends IntentService {
EventDataSQLHelper eventsData;
SQLiteDatabase dbx ;
SQLiteDatabase rdbx;
ContentValues values;
public BackgroundService() {
super("BackgroundService");
}
@Override
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
eventsData=new EventDataSQLHelper(BackgroundService.this);
values=new ContentValues();
dbx = eventsData.getWritableDatabase();
rdbx = eventsData.getReadableDatabase();
for(int i=0;i<100000;i++)
{
dbx.insert("tablename", null,values);
}
dbx.close();
}
}