2015-03-20 1 views
2

Во время работы на устройстве (iOS 8) я думаю, что система может прекратить мое приложение, пока оно приостановлено, либо делать это с памятью, либо слишком долго выполнять фоновое задание. Я подозреваю это, потому что, когда я возобновляю приложение, он вернулся к контроллеру корневого представления, что не должно быть возможным, если приложение не начнет работать.Если ваше приложение завершено системой iOS, оно генерирует отчет о сбое?

Однако я никогда не вижу отчета о сбоях при просмотре журналов устройств.

Если система завершает работу вашего приложения, она всегда будет генерировать отчет о сбое?

ответ

2

Если приложение будет убито низкой памятью обычно generates a low memory report:

При обнаружении условия низкой памяти, система виртуальной памяти прошивки опирается на сотрудничестве приложений, чтобы освободить память. Уведомления с низкой памятью отправляются всем запущенным приложениям и процессам в качестве запроса на освобождение памяти, в надежде уменьшить объем используемой памяти. Если давление памяти все еще существует, система может прекратить фоновые процессы, чтобы уменьшить давление памяти. Если достаточное количество памяти может быть освобождено, ваше приложение будет продолжать работать, и отчет о сбоях не будет сгенерирован. Если нет, ваше приложение будет прекращено iOS, потому что недостаточно памяти для удовлетворения требований приложения, и отчет о низкой памяти будет сгенерирован и сохранен на устройстве.

Формат отчета с низкой памятью отличается от других отчетов о сбоях тем, что трассировки стека для потоков приложений отсутствуют. Использование памяти каждого процесса сообщается с точки зрения количества страниц памяти, которые на момент написания этой книги составляют 4 КБ. Вы увидите «(отброшенное)» рядом с именем любого процесса, завершенного iOS, чтобы освободить память. Если вы видите его рядом с именем вашего приложения, это подтверждает, что приложение было прервано для использования слишком большого количества памяти.

Этот отчет можно увидеть обычно в журналах сбоев, но, по моему опыту, этот журнал не гарантируется.

An example of a memory report:

Incident Identifier: 30E46451-53FD-4965-896A-457FC11AD05F 
CrashReporter Key: 5a56599d836c4f867f6eec76afee451bf9ae5f31 
OS Version:   iPhone OS 3.1.3 (7E18) 
Date/Time:   2012-10-17 21:39:06.967 -0400 

Free pages:  96 
Wired pages:  10558 
Purgeable pages: 0 
Largest process: Rage Masters 

Processes 
    Name     UUID     Count resident pages 
Rage Masters <cc527ca9b51937c5adbe035fe27a7b12> 9320 (jettisoned) (active) 
mediaserverd <3d3800d6acfff050e4d0ed91cbe2467e>  255 
dataaccessd <13d80b2e707acc91f9aa3ec4c715b9cc>  505 
    syslogd <8eddddc00294d5615afded36ee3f1b62>  71 
     apsd <32070d91b216d806973c8f1b1d8077a4>  171 
    securityd <b9e51062610d27f727c5119b8f80dcdf>  243 
    notifyd <591dd4dd804b4b8741f52335ea1fa4ab> 2027 
    CommCenter <b4b87526ae086bb62c982f1078f43f81>  189 
SpringBoard <324939a437d1cca1fa4af72d9f5d0eba> 2158 (active) 
    accessoryd <8f21c8b376d16e2ccb95ed6d21d8317a>  91 
    configd <85efd41aceac34ccc0019df76623c7a9>  371 
    fairplayd <a2eaf736b3e07c7c9a2c82e9eb893555>  93 
mDNSResponder <df1cd275e4ad434e0575990e8e1da4cb>  292 
    lockdownd <80d2bd44c0bcca273d48ce52010f7e65> 1204 
    launchd <a5988245aade809bf77576f1d9de42c5>  72 

На самом деле, это одна из проблем, с которыми команда crashlytics является trying to solve:

Это сложно, так как эти события на самом деле отдельные события из аварий. События с низкой памятью сложны для захвата, поскольку нет известного способа захвата выхода с низкой памятью с помощью открытого API.

Однако мы работаем над системой, которая будет производить запись этих событий. Будьте на связи!

Что касается фона сбой обычно вы получаете журнал аварии с чем-то вроде this message:

Application Specific Information: 
MyMapApp[1234] has active assertions beyond permitted time: 
{(
    <SBProcessAssertion: 0x63a07a0> identifier: CoreLocationRegistration process: MyMapApp[1234] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1234 preventSuspend preventIdleSleep , 
<SBProcessAssertion: 0xa095050> identifier: CoreLocationBackgroundClient process: MyMapApp[1234] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1234 preventSuspend preventIdleSleep 
)} 
+0

Не поощрять, если crashlytics испытывает проблемы с ловлей это, но я буду смотреть. Кроме того, знаете ли вы, что может быть сообщено в терминах завершения из-за того, что фоновый процесс занимает слишком много времени? На самом деле я больше подозреваю. – jeffjv

+0

Отредактировано, чтобы добавить случай, когда в фоновом режиме происходит сбой приложения. –