Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-828

iOS contact.save() stucks the UI from updating on heavy load & has memory leaks.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 2.1.0
    • cordova-ios

    Description

      I'm trying to restore 3000 contacts on a device, since i need to display a progress UI, I had to use something like this (SenchaTouch 2 code but you get the point).

      [CODE]

      //forEach contacts as contact...

      _.delay(function() {
      contact.save({callback : function(contact, operation) {
      d&&console.log(displayName + ' ~ saved ('+ action +') contact', arguments);
      j++;
      App.getViewport().mask(

      {message: __('restore...'), details: j + '/' + count, progress: j/count, mode: 'determinate'}

      );
      // Last item ?
      if(j == count)

      { contactStore.clearFilter(); return self.afterRestore(callback); }

      }});
      }, 25*i);

      [/CODE]

      Works quite well in the simulator but i'm getting regular "failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode" on a device.

      Major issue is that UI gets stuck for minutes.

      Then i get a few "Received memory warning."

      As if somehow the memory stacked somewhere (but the whole point of making separate call was to avoid memory breakdown), so there might be a leak.

      At the end, it sometimes work / crash.

      Would there be a way to somehow use another thread for theses AddressBook operations?

      How could i prevent theses memory leaks?

      Attachments

        Activity

          People

            becka11y Becky Gibson
            mgcrea Olivier Louvignes
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: