更新:我已经在没有离线包装的情况下再次测试它,它似乎工作正常(我一定错过了之前)所以问题似乎是由AngularFire2离线引起的( https://github.com/adriancarriger/angularfire2-offline)。有没有人遇到过类似的问题?
我使用Firebase作为数据库在Ionic2中构建一个Android应用程序,看起来我有一个内存泄漏,到目前为止我无法修复。要加载firebase数据,我使用AngularFire2和AngularFire2 Offline。
为了测试此问题,我简化了数据结构和应用功能。如果涉及数据,我有一个用户列表,每个用户都有一个任务列表(任务是用户的子项)。在应用程序中,我有2个页面 - 第一个显示用户列表,第二个显示所选用户的任务。每个任务都有一个复选框 - 一旦选中,任务的isDone
标志就会更新,任务不再显示(我使用搜索管道只显示isDone == false
的任务)。
问题在于,每次更新任务时,内存使用量都会显着增加(大约1MB)。下面的屏幕截图显示了3个快照:
内存使用量永远不会下降 - 每次更新(即使我转到不同的用户)都会增加它。经过几分钟的测试,它超过100MB甚至更多。这会导致Android设备上的应用程序崩溃。
背后的代码:
(循环开始):
<ng-container *ngFor="let task of tasks$ | async | search:'isDone':false">
- 获取任务列表(AfoListObservable):
this.tasks$ = this.data.getTasks(this.userKey);
- 更新任务:
this.data.updateTask(this.userKey, task.$key, task);
数据提供者中的两种方法:
getTasks(userKey: string): AfoListObservable<Task[]> {
return this.db.list("/users/" + userKey + "/tasks");
}
updateItem(userKey: string, taskKey: string, task: Task): firebase.Promise<void> {
return this.db.object("/users/" + userKey + "/tasks/" + taskKey).update(task);
}