Ionic2 + AngularFire2离线=内存泄漏

时间:2017-09-07 01:40:20

标签: firebase memory-leaks firebase-realtime-database ionic2 angularfire2

更新:我已经在没有离线包装的情况下再次测试它,它似乎工作正常(我一定错过了之前)所以问题似乎是由AngularFire2离线引起的( https://github.com/adriancarriger/angularfire2-offline)。有没有人遇到过类似的问题?

我使用Firebase作为数据库在Ionic2中构建一个Android应用程序,看起来我有一个内存泄漏,到目前为止我无法修复。要加载firebase数据,我使用AngularFire2和AngularFire2 Offline。

为了测试此问题,我简化了数据结构和应用功能。如果涉及数据,我有一个用户列表,每个用户都有一个任务列表(任务是用户的子项)。在应用程序中,我有2个页面 - 第一个显示用户列表,第二个显示所选用户的任务。每个任务都有一个复选框 - 一旦选中,任务的isDone标志就会更新,任务不再显示(我使用搜索管道只显示isDone == false的任务)。

问题在于,每次更新任务时,内存使用量都会显着增加(大约1MB)。下面的屏幕截图显示了3个快照:

  1. 加载应用程序并显示用户列表(33.7MB)
  2. 载入近40个任务的列表后(35.9MB)
  3. 15个任务更新后(46.2MB)
  4. snapshots

    内存使用量永远不会下降 - 每次更新(即使我转到不同的用户)都会增加它。经过几分钟的测试,它超过100MB甚至更多。这会导致Android设备上的应用程序崩溃。

    背后的代码:

      页面html中的
    • (循环开始):

      <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);
      }
      

0 个答案:

没有答案