我每秒运行一个线程,该线程每秒更新一次Realm数据库字段。尽管要更新的数据很小,但我发现更新仍然会增加数据库文件大小,直到您使用明确清除它为止,Realm.compressRealm()
因此一两个小时内数据库大小为50MB +,并且很容易在短时间内膨胀到750MB +。 。
我将realm.close()
在Activity中关闭RealmonStop()
并关闭我在计时器线程中创建的新Realm实例:
public void checkDealersTimer() {
RealmResults<Dealers> dealersLookup = realm.where(Dealers.class).equalTo("thedealers","thedealers").findAll();
dlr = dealersLookup.get(0);
if (dlr.getPerSecond() != 0.00) {
if (dealerTimer == null) {
dealerTimer = new Timer();
dealerTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Realm drealm;
drealm = Realm.getDefaultInstance();
RealmResults<Dealers> dealersLookup = drealm.where(Dealers.class).equalTo("thedealers","thedealers").findAll();
dlr = dealersLookup.get(0);
drealm.beginTransaction();
dlr.setEarnings(dlr.getEarnings()+dlr.getPerSecond());
drealm.commitTransaction();
drealm.close();
}
}, 0, 1000);
}
}
}
该计时器是我在UI线程之外使用Realm的唯一位置,也是我进行如此频繁的更新的唯一位置,因此尽管无法确定,但我假设“泄漏”来自此处。无论应用程序是否可见,文件大小都会逐渐增加,但仅限于运行时。
这是另一个存在类似问题的用户:由于领域Android,应用程序大小增加
如果这被认为是解决方案,我无法找到正确的方法来调用Realm.compressRealm()
,因为该数据库应该是当你使用它来更新每一秒,我只能关闭的境界onDestroy()
不是onStop()
(并且Realm.compressRealm()
要求你关闭所有国度)
感谢您的投入,谢谢!
我遇到了一个问题,即我的领域文件大小以惊人的速度增加,这是close()
在开发过程中应用程序意外关闭时不调用的问题。因此,我的数据库文件(其中只有大约1k项)为10MB。适当关闭我的领域实例可以解决此问题,并将数据库文件大小减少到〜300KB。确实,值得检查整个代码库,以确保您实际上关闭了所有领域实例。这很烦人,但是比让用户抱怨存储空间不足要好;)
根据上面的示例,我还建议您使用领域提供的executeTransaction方法(而不是开始/提交事务):
drealm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
dlr.setEarnings(dlr.getEarnings() + dlr.getPerSecond());
}
});
drealm.close();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句