Non-Fatal Error sa Mga Mobile Application — Esensya, Mga Uri at Paghawak ng Error

May-akda: IT Sectr Nai-publish: 2026-05-27 Oras ng pagbabasa: 8 min

Non-Fatal Error — ay isang error na hindi humahantong sa pagtatapos ng aplikasyon at nagpapahintulot na ipagpatuloy ang pagpapatakbo ng programa. Hindi tulad ng fatal error, ang mga non-fatal na error ay maaaring mahuli, mapangasiwaan at mai-log nang hindi nawawala ang session ng gumagamit. Ayon sa Firebase Crashlytics Documentation, 2024, humigit-kumulang 70% ng lahat ng naitalang error sa mga production application ay non-fatal, ngunit ang pagbalewala sa mga ito ay humahantong sa akumulasyon ng teknikal na utang at unti-unting pagkasira ng karanasan ng gumagamit. Ang tamang paghawak ng mga non-fatal error ay isa sa mga pangunahing kasanayan ng isang mobile developer.

Mga Pangunahing Punto

  • Non-Fatal Error — error na hindi nagtatapos sa aplikasyon at nagpapahintulot ng pagpapanumbalik ng pagpapatakbo
  • Pangangasiwa ng non-fatal na error ay kinabibilangan ng try-catch, pag-log at pagpapakita ng fallback UI
  • Pag-log ng non-fatal na error ay kritikal para sa paghahanap ng mga nakatagong bug sa production
  • Fatal Error — kabaligtaran: error na nagdudulot ng crash ng aplikasyon nang walang posibilidad ng pagpapanumbalik
  • Crashlytics at Sentry ay nagpapahintulot ng real-time na pagsubaybay ng non-fatal na error

Ano ang Non-Fatal Error

Non-Fatal Error — ay isang exception o maling estado na hindi nagiging sanhi ng pagtatapos ng proseso. Ang aplikasyon ay patuloy na gumagana, ngunit maaaring nasa maling estado: hindi na-load ang data, hindi naipadala ang kahilingan, hindi naipakita ang elemento ng interface. Ang gumagamit ay maaaring hindi mapansin ang error o makakita ng mensahe at magpatuloy sa paggamit ng aplikasyon.

Mga Pangunahing Tampok

Ang non-fatal na error ay laging nag-iiwan sa programa ng landas para sa pagpapanumbalik. Ang tagapangasiwa ng error ay maaaring mag-alok ng alternatibong data, ulitin ang operasyon o magpakita ng placeholder ng interface. Ang pangunahing gawain ay pigilan ang crash at mapanatili ang karanasan ng gumagamit sa isang katanggap-tanggap na antas. Dapat tahasang isaalang-alang ng developer ang senaryo ng pagpapanumbalik sa bawat bloke ng catch.

Papel sa Katatagan ng Aplikasyon

Ayon sa datos ng Instabug 2024, 65% ng mga gumagamit ay nagtatanggal ng aplikasyon pagkatapos ng dalawang nabigong interaksyon. Ang mga non-fatal na error na hindi pinapansin ay naiipon at nagpapababa ng pangkalahatang kalidad ng trabaho. Ang sistematikong pag-log at pag-aayos ng mga non-fatal na error ay direktang daan upang mapataas ang retention at mapabuti ang mga rating ng gumagamit sa mga tindahan ng aplikasyon.

Mga Uri ng Non-fatal na Error

Mga Error sa Network — ang pinakakaraniwang uri ng non-fatal na error sa mga mobile application. Timeout ng koneksyon, pagkawala ng network, maling code ng status ng server — lahat ng sitwasyong ito ay nahuhuli at napangasiwaan nang walang crash. Ipinapakita sa gumagamit ang mensahe tungkol sa hindi pagkakaroon ng serbisyo na may mungkahing subukan muli. Para sa mga error sa network, tipikal ang pattern ng retry na may exponential delay.

Mga Error sa Pag-validate ng Data

Maling format ng tugon ng server, kawalan ng mandatoryong field, maling uri ng data — mga error sa parsing ay non-fatal kung ang aplikasyon ay wastong humahawak ng maling data. Ang tipikal na diskarte ay paggamit ng mga default na halaga ng backup at pag-log ng error sa parsing na may konteksto ng kahilingan para sa susunod na pagsusuri sa server.

Mga Error sa Pag-render ng UI

Mga problema sa pag-load ng mga imahe, maling mga font, error sa layout — lahat ng ito ay hindi fatal ngunit pinapahina ang impresyon ng gumagamit. Mga placeholder na imahe at fallback na halaga ay pumipigil sa mga blangkong screen at ginagawang hindi gaanong kapansin-pansin ang mga error. Sa React Native para sa mga error sa UI ay ginagamit ang Error Boundary na may pagpapakita ng bahaging pamalit.

Mga Error sa Lohika ng Negosyo at Estado

Mga error sa pagkalkula, hindi pagkakatugma ng estado, maling paglipat sa pagitan ng mga screen — mga lohikal na error ay kadalasang hindi humahantong sa crash, ngunit humahantong sa maling pag-uugali ng aplikasyon. Mas mahirap silang matukoy nang walang sistematikong pag-log at pagsubaybay dahil hindi sila lumilikha ng ulat ng crash at nananatiling hindi napapansin hanggang sa reklamo ng gumagamit.

Non-Fatal Error vs Fatal Error: Paghahambing

Non-Fatal Error ay naiiba mula sa fatal dahil iniiwan nito sa programa ang kakayahang magpatuloy sa trabaho. Fatal error — ay isang estado kung saan hindi makakabawi ang aplikasyon: dereferensya ng null pointer, stack overflow, kakulangan ng memorya. Ang non-fatal na error ay maaaring mahuli, mapangasiwaan at ipagpatuloy ang pagpapatakbo, habang ang fatal error ay nangangailangan ng pag-restart ng aplikasyon.

KatangianNon-Fatal ErrorFatal Error
Pagtatapos ng AplikasyonHindiOo
Posibilidad ng PagpapanumbalikOo, sa pamamagitan ng catch blockHindi
Pag-logMula sa kodigo sa pamamagitan ng recordExceptionTanging ng crash reporter
Epekto sa UXPansamantalang abalaGanap na pagkawala ng session
HalimbawaNetwork timeout, parse errorNullPointerException, OOM

Ang hangganan sa pagitan ng non-fatal at fatal ay maaaring depende sa implementasyon. Ang network timeout sa isang aplikasyon ay pinangangasiwaan bilang non-fatal (pag-uulit ng kahilingan pagkatapos ng 1–2 segundo), sa iba ay maaaring fatal (crash kung walang tagapangasiwa). Ang de-kalidad na paghawak ng error ay ginagawang non-fatal ang mga potensyal na fatal na sitwasyon, pinapataas ang katatagan ng aplikasyon. Ang pagdisenyo ng sistema ng paghawak ng error ay isa sa mga pangunahing gawaing arkitektural sa pagbuo ng mobile application na may mataas na pangangailangan sa pagiging maaasahan. Ang built-in na sistema ng pagsubaybay ay nagpapahintulot sa koponan na mabilis na matukoy at maayos ang mga non-fatal na error bago makaapekto ang mga ito sa malaking bilang ng mga gumagamit.

Pag-log ng Non-fatal na Error

Firebase Crashlytics — ang pangunahing kasangkapan para sa pag-log ng mga non-fatal na error sa mga mobile application. Ang pamamaraang recordException ay nagpapahintulot na itala ang non-fatal na exception na may kumpletong stack trace at konteksto ng pagpapatakbo nang hindi naaabala ang trabaho ng aplikasyon. Hindi tulad ng mga ulat ng crash, ang recordException ay maaaring tawagan sa anumang bahagi ng kodigo para sa pag-log ng mga nahuling exception.

kotlin
fun fetchUserData(userId: String) {
    try {
        val response = apiService.getUser(userId)
        updateUI(response)
    } catch (e: IOException) {
        Crashlytics.log("Network error for user $userId")
        Crashlytics.recordException(e)
        showRetryDialog()
    } catch (e: JsonParseException) {
        // Non-fatal: gumagamit ng backup na data
        Crashlytics.recordException(e)
        showFallbackContent()
    }
}

// Pag-log gamit ang mga susi ng gumagamit
Crashlytics.setCustomKey("screen", "Profile")
Crashlytics.setCustomKey("api_version", "v3")

Sentry — alternatibo sa Crashlytics na may mas detalyadong diagnostiko ng mga non-fatal na error. Ang Sentry SDK ay nagbibigay ng pamamaraang captureException, na nagpapadala ng mga detalye ng exception sa server. Ang pangunahing bentahe ng Sentry ay ang pagpapangkat ng mga katulad na non-fatal na error sa iisang issue, pagsusuri ng dalas ng pag-uulit at konteksto ng pagpapatakbo sa anyo ng breadcrumbs — pagkakasunod-sunod ng mga aksyon ng gumagamit bago ang error.

Mga Kraytirya sa Pag-log ng Non-fatal na Error

Hindi lahat ng non-fatal na error ay kailangang i-log. Mga inaasahang estado — pagkabigo ng network kapag walang koneksyon — ay maaaring i-log nang pili. Mga hindi inaasahang error — NullPointerException sa pinangasiwaang kodigo, maling format ng data, logic error — ay dapat palaging i-log. Ang bawat koponan ay tumutukoy sa antas ng kahalagahan: sa karaniwan, 10 hanggang 20 natatanging non-fatal na error bawat 1000 gumagamit bawat araw ay itinuturing na normal. Mahalagang mag-set up ng mga alerto sa biglaang pagtaas ng bilang ng mga non-fatal na error — ito ay maaaring magpahiwatig ng mga problema sa bagong bersyon ng API o regression pagkatapos ng release.

Pangangasiwa ng Non-fatal na Error sa Kodigo

Ang pangunahing mekanismo ng pangangasiwa — try-catch, na pumupukaw ng exception at nagpapatupad ng kodigo ng pagpapanumbalik. Para sa mga operasyon sa network, ang tipikal na pattern ay pag-uulit ng kahilingan na may exponential delay (retry with backoff). Para sa mga error sa parsing — paggamit ng mga default na halaga ng backup at pag-log ng konteksto para sa susunod na pagsusuri sa panig ng server.

swift
func loadImage(from url: URL) -> UIImage? {
    do {
        let data = try Data(contentsOf: url)
        return UIImage(data: data)
    } catch {
        Logger.shared.logError(error: "Image load failed: \(url)")
        return UIImage(named: "placeholder")
    }
}

func performRequest() async throws -> Data {
    var lastError: Error? = nil
    for attempt in 0..<3 {
        do {
            return try await URLSession.shared.data(from: url)
        } catch {
            lastError = error
            try await Task.sleep(UInt64(pow(2, attempt)) * 1_000_000_000)
        }
    }
    throw lastError ?? URLError(.unknown)
}

Mga Uri ng Result — alternatibong diskarte nang walang exception. Ang function ay nagbabalik ng sealed class Result na may mga variant na Success at Failure. Ang tumatawag na kodigo ay tahasang humahawak sa parehong variant, na nag-aalis ng mga hindi napangasiwaang error. Ang mga uri ng Result ay sikat sa Kotlin (Result sa karaniwang aklatan) at Swift (Result) para sa tahasang pangangasiwa ng mga non-fatal na estado sa antas ng uri.

Mga Istratehiya ng Fallback para sa Non-fatal na Error

Para sa bawat uri ng non-fatal na error ay kailangang maglaan ng istratehiya ng pagpapanumbalik: pag-load ng naka-cache na data sa error sa network, paggamit ng mga default na halaga sa error sa parsing, muling pagsisimula ng bahagi sa error sa UI. Ang mabuting kasanayan ay magpakita ng toast o snackbar na may mensahe ng error sa gumagamit, ngunit hindi ganap na harangan ang interaksyon sa aplikasyon. Mahalagang pag-ibahin ang mga error na maaaring maibalik (recoverable) at hindi maaaring maibalik — para sa huli ang istratehiya ng pagpapanumbalik ay magkakaiba, halimbawa, mungkahing i-restart ang screen o linisin ang data. Ang pag-cache ng nakaraang matagumpay na estado ay kadalasang pinakasimple at pinakamabisang paraan ng pangangasiwa ng mga non-fatal na error sa mga mobile platform.

Mga Madalas Itanong

Ano ang pagkakaiba ng non-fatal error at warning?

Warning — ay babala ng compiler o static analyzer tungkol sa potensyal na problema sa kodigo. Non-fatal error — ay isang runtime exception na naganap na ngunit hindi humantong sa crash. Ang warning ay maaaring alisin bago ang compilation, ang non-fatal error — ay maaaring pangasiwaan sa panahon ng pagpapatakbo sa pamamagitan ng catch block.

Kailangan bang i-log ang lahat ng non-fatal na error?

Hindi, ang labis na pag-log ay bumabara sa pagsubaybay. Mas mainam na i-log ang mga hindi inaasahang error sa production at balewalain ang mga inaasahang estado: ang pagkabigo ng network kapag walang koneksyon ay ini-log nang pili, habang ang NullPointerException sa pinangasiwaang kodigo — palagi. Ang bawat koponan ay tumutukoy sa antas ng kahalagahan batay sa konteksto ng aplikasyon.

Paano pangasiwaan ang non-fatal error sa SwiftUI?

Sa SwiftUI ay ginagamit ang ObservableObject na may @Published na field na errorState para subaybayan ang estado ng error. Ang View ay nag-subscribe sa mga pagbabago at nagpapakita ng alternatibong nilalaman. Bago ang iOS 17 ay ginamit ang Combine na may mga tagapangasiwa, simula sa iOS 17 — SwiftData at @Observable macro para sa reaktibong pag-update ng UI.

Maaari bang maging fatal ang non-fatal error?

Oo, kung ang error ay magdudulot ng chain reaction. Halimbawa: ang non-fatal na pagkabigo sa pag-load ng imahe ay maaaring humantong sa maling estado ng UI, na pagkatapos ay magdudulot ng crash sa pagtatangkang magpakita. Ang de-kalidad na pangangasiwa ng mga non-fatal na error sa bawat antas ay pumipigil sa kanilang pag-akyat sa fatal na antas.

Paano naiiba ang non-fatal sa iOS at Android?

Sa iOS, ang mga non-fatal na error ay pinangangasiwaan sa pamamagitan ng do-catch na may throw, sa Android — sa pamamagitan ng try-catch na may exceptions. Ang iOS ay gumagamit ng NSError na may mga domain at code ng error, ang Android — Java/Kotlin exceptions. Ang Crashlytics ay gumagana nang pareho sa parehong platform sa pamamagitan ng recordException, na nagbibigay ng pinag-isang interface para sa pagsubaybay.

Buod

  • Non-Fatal Error — runtime error na hindi nagtatapos sa aplikasyon at nagpapahintulot ng pagpapanumbalik ng pagpapatakbo
  • Mga error sa network, parsing at pag-render ng UI — tatlong pangunahing klase ng non-fatal na error
  • Fatal Error — kabaligtaran ng non-fatal, nagdudulot ng ganap na crash nang walang pagpapanumbalik
  • Crashlytics at Sentry — mga pangunahing kasangkapan sa pag-log ng non-fatal na error sa production
  • Mga Uri ng Result — alternatibo sa exceptions para sa tahasang pangangasiwa ng mga maling estado sa antas ng uri
  • Mga halaga ng placeholder at fallback na istratehiya ay pumipigil sa nakikitang pagkasira ng karanasan ng gumagamit
  • Sistematikong pag-aayos ng non-fatal na error ay nagpapataas ng retention at kalidad ng aplikasyon ayon sa Instabug

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din