Недавно я проводил анализ памяти в одном из своих приложений. Приложение сделано для платформы Android. На двух экранах я наблюдаю утечку.
Без проверки, я удалил весь свой код и оставил только вызов $.screenName.open() на обоих контроллерах, и способ их вызова:
Alloy.createController(screenToLaunch, payloadJson);
Внутри соответствующих контроллеров присутствовал вызов open(). Я использую DDMS и делаю анализ кучи.
Прежде чем открыть контроллер A, я несколько раз нажимал кнопку GC, чтобы получить стабильное выделенное чтение. После этого я запускаю контроллер A и нажимаю кнопку «Назад», чтобы закрыть его. Теперь, когда я несколько раз нажимаю на вызов GC, каждый раз разница составляет 60 КБ.
Я не сохраняю ссылку createController ни в одной глобальной переменной. Любая идея относительно того, почему он ведет себя таким образом?
Выше показана разница HPROF между открытием и закрытием контроллера. Я не использую никаких вызовов БД, но вижу, что выполняется много вызовов, связанных с БД. Я думаю, возможно, фреймворк использует эти вызовы для своего внутреннего функционирования.