Crash ng app: ano ito, mga sanhi ng pag-crash at mga paraan ng pag-detect

May-akda: IT Sectr Nai-publish: 2026-07-27 Oras ng pagbabasa: 7 min

Crash ng app — emergency na pagtatapos kung saan huminto sa pagtugon ang programa at nagsasara. Sa mobile development, ang mga crash ay pangunahing pinagmumulan ng negatibong review at pagbaba ng rating. Ayon sa datos ng Firebase (2024), tinatanggal ng mga user ang app pagkatapos ng isa-dalawang crash sa 53% ng mga kaso. Bawat pagsasara ay nagbabawas ng retention ng 3–5%. Ang mga monitoring system tulad ng Crashlytics at Sentry ay tumutulong na mabilis na mahanap at ayusin ang mga sanhi ng crash bago ito makaapekto nang malawakan sa mga user.

Mga Pangunahing Punto

  • Crash — hindi inaasahang pagtatapos ng app dahil sa hindi na-handle na runtime error
  • Mga Pangunahing Sanhi — NullPointerException, OutOfMemoryError, IndexOutOfBounds, ANR sa Android
  • Crashlytics — standard ng crash monitoring na may automatic stack trace collection at grouping
  • Runtime exceptions — mga exception na hindi nache-check ng compiler, lumalabas lang sa runtime
  • Mga Estratehiya sa Pag-iwas — mahigpit na typing, optional binding, error handling, at testing

Ano ang crash ng app

Crash — hindi inaasahang pagtatapos ng programa sanhi ng isang exception na hindi na-handle ng code. Sa mobile OS, ang crash ay nagdudulot ng agarang pagsasara ng app at pagpapakita ng screen na “App ay huminto” o pagbabalik sa home screen.

Ang mga crash ay nahahati sa dalawang malaking klase. Na-handle na error — hinuhuli ng try/catch blocks ang exception, nagpapatuloy ang app, posible na may pagkawala ng functionality. Hindi na-handle na crash — umaakyat ang exception hanggang sa level ng OS at pinapatay ng system ang process. Ang ikalawang uri ay lubhang mapanganib dahil hindi mai-save ng user ang data.

Ang system na may dalawang milyong user at 0.1% crash rate ay nawawalan ng 2,000 user sa bawat release. Ayon sa Google Play Console (2024), ang mga app na may crash rate na higit sa 1.5% ay hindi kasama sa rekomendasyon at nawawalan ng hanggang 30% ng organic traffic.

Mga pangunahing sanhi ng pag-crash sa mobile apps

NullPointerException (NPE) — hari ng crash sa Java/Kotlin. Pagtawag ng method sa null object. Sa Kotlin, mas bihira ang NPE dahil sa null safety, ngunit posible pa rin gamit ang operator !! o pakikipag-ugnayan sa Java code. tantiya: NPE ay 25% ng lahat ng crash ng Android apps.

IndexOutOfBoundsException — pag-access sa list element na may hindi umiiral na index. Karaniwang sanhi: ang data ay galing sa server sa hindi inaasahang format at sinusubukan ng UI na magpakita ng posisyong wala. Solusyon — laging suriin ang laki ng collection bago mag-access sa pamamagitan ng index.

ANR (Application Not Responding) — problemang spesipiko sa Android. Ang UI thread ay naka-block ng higit sa 5 segundo. Pangunahing sanhi: network requests sa main thread, mabibigat na kalkulasyon, synchronization sa database. StrictMode sa Android tumutulong na matukoy ang pag-block ng UI thread sa yugto ng development.

OutOfMemoryError (OOM) — nalampasan ng app ang limitasyon ng memory. Sa mobile devices na may 2–4 GB RAM, karaniwan ang OOM sa pagtatrabaho sa malalaking larawan o walang katapusang listahan nang walang pagination. Solusyon — Glide/Coil para sa pag-load ng larawan, LruCache para sa caching, ViewHolder sa RecyclerView.

Runtime exceptions at fatal error

Runtime exceptions — mga error na hindi nache-check ng compiler sa build stage. Lumalabas lamang ang mga ito sa pag-execute ng code sa isang partikular na device na may partikular na data. Sa Java, ito ay RuntimeException at mga subclass nito: NullPointerException, IllegalArgumentException, ArithmeticException.

Fatal error (FATAL) — hindi runtime, kundi system failures. Signal 11 (SIGSEGV) — paglabag sa memory segmentation sa native code. Signal 6 (SIGABRT) — emergency na pagtatapos na dulot ng app mismo sa pamamagitan ng abort(). Mahirap i-diagnose ang mga ganitong crash dahil ang stack trace ay madalas na hindi nagpapakita ng naiintindihang konteksto.

Sa iOS, ang mga pangunahing sanhi ay NSInvalidArgumentException (hindi inaasahang nil sa parameter) at EXC_BAD_ACCESS (pag-access sa freed memory). Binawasan ng Swift ang bilang ng crash kumpara sa Objective-C, ngunit ang mga error sa ObjC runtime at C libraries ay nagdudulot pa rin ng pag-crash.

Monitoring at koleksyon ng crash logs

Firebase Crashlytics — ang standard para sa mobile apps. Awtomatikong nangongolekta ng stack trace, nagdaragdag ng logs, user ID, at device metadata. Nag-grupo ng crash ayon sa signature (error class + line). Real-time alerts — mga notification kapag ang crash rate ay lumampas sa itinakdang threshold (hal. >0.1% bawat oras).

Sentry — alternatibo na may mas flexible na kakayahan. Pinapayagan ang paggawa ng custom contexts, pagdagdag ng breadcrumbs, pag-configure ng in-app filtering para i-exclude ang hindi importanteng error. Source maps para sa Kotlin at Swift ay nagbibigay-daan na makita ang source code, hindi ang obfuscated names.

Best practices para sa logs: magpadala ng mahahalagang metadata bago magsagawa ng mapanganib na operasyon. Magdagdag ng custom keys (numero ng API version, huling screen, laki ng input data). Ginagawa nitong kapaki-pakinabang na impormasyon ang walang kwentang stack trace.

Halimbawa: pag-setup ng Crashlytics sa Android

kotlin
class PaymentViewModel : ViewModel() {
    fun processPayment(amount: Double) {
        crashlytics.setCustomKey("last_screen", "payment")
        crashlytics.setCustomKey("amount", amount)
        try {
            api.charge(amount)
        } catch (e: Exception) {
            crashlytics.recordException(e)
        }
    }
}

undefined

Optional binding at null safety — sa Kotlin gamitin ang `?` para sa nullable types, `let` at `?:` para sa safe na pag-handle ng null. Sa Swift — optionals at guard let. Modern Kotlin (2024) nagdagdag ng Contract annotations: ang @ContractsDsl ay nagpapahintulot na ideklara na ang function ay hindi nagbabalik ng null, at ito ay nire-check ng compiler.

Error handling sa network — bawat network request ay dapat mag-handle ng timeout, parsing errors, at pagtanggi ng server. Retrofit na may Result type — isang sealed class na ginagarantiyang mahahandle ang error. No Exception style: sa halip na try/catch, gumamit ng sealed Result para sa explicit na pag-handle ng tagumpay at error.

Feature flags — i-disable ang problematikong functionality nang malayuan nang hindi nagrerelease ng bagong version. Firebase Remote Config nagbibigay-daan na baguhin ang behavior ng app nang walang publikasyon sa store.

Unti-unting pag-release — i-release ang bagong version sa 5% ng audience at subaybayan ang crash rate. Kung mananatiling mababa ang rate sa target (karaniwang <0.1%), palawakin sa 25%, pagkatapos 50%, pagkatapos 100%. Google Play Console at App Store Connect ay sumusuporta sa staged rollouts para sa automatic na paghinto kapag nalampasan ang threshold.

Plano ng aksyon sa pagtuklas ng error

1: Pag-uuri — tukuyin ang severity: Critical (crash sa >1% ng users), High (0.1–1%), Medium (<0.1%). Para sa Critical crash — agarang tugon. Awtomatikong inuuri ng Google Play Console ang crash ayon sa bilang ng apektadong user.

2: Stack trace analysis — buksan ang log sa Crashlytics, tingnan ang eksaktong lokasyon ng failure. Suriin ang custom keys: anong screen, anong data, OS version. Ikumpara sa huling deployment — kadalasan ang crash ay sanhi ng bagong pagbabago sa code na nakaapekto sa hindi inaasahang scenario ng paggamit.

3: Reproduction — subukang i-reproduce ang crash sa device o emulator na may katulad na parameter. Kung hindi magtagumpay, suriin ang crash log para sa patterns: specific models (Samsung A10), Android versions (API < 26), locale. Solusyon — magdagdag ng protective condition na sumasaklaw sa scenario.

4: Fix at monitoring — mag-release ng hotfix na may priyoridad. Pagkatapos ng release, tiyaking bumaba sa zero ang crash rate para sa ganitong uri. Sumulat ng regression test na sumasaklaw sa crash scenario. Kapag walang test, ang parehong bug ay maaaring bumalik sa susunod na refactoring.

Mga Madalas Itanong

Ano ang itinuturing na normal na crash rate?

Normal na crash rate — mas mababa sa 0.1% para sa production releases. Inirerekomenda ng Google Play na panatilihin ang crash rate sa ibaba 1.5%, ngunit ang mga top app (YouTube, Instagram) ay nagpapanatili ng 0.01–0.05%. Para sa bagong functionality releases, pinapayagan ang pansamantalang pagtaas hanggang 0.5% na may kasunod na pagbaba pagkatapos ng hotfix.

Paano naiiba ang crash sa ANR?

Crash — ang app ay nagtatapos nang emergency. ANR (Application Not Responding) — ang app ay nag-freeze nang higit sa 5 segundo, ngunit hindi sapilitang isinasara. Nakikita ng user ang dialog “App ay hindi tumutugon” at maaaring maghintay o magsara. Ang mga problema sa ANR ay hindi gaanong seryoso kaysa sa crash at nakakaapekto rin sa rating sa store.

Bakit maaaring hindi mag-reproduce ang crash sa lahat ng device?

Ang iba't ibang device ay may iba't ibang OS version, dami ng memory, library version, at maging processor. Halimbawa: ang crash sa Android 6 (API 23) dahil sa kakulangan ng runtime permission ay maaaring hindi mag-reproduce sa Android 12.

Paano mahahanap ang sanhi ng crash kung hindi informative ang stack trace?

Magdagdag ng custom breadcrumbs sa Crashlytics: itala ang mahahalagang event bago magsagawa ng operasyon. Debug symbols (dSYM, ProGuard mapping) — i-upload sa Crashlytics para makita ang tunay na pangalan ng function, hindi ang obfuscated.

Dapat ko bang i-crash ang app sa non-fatal error?

Sa production — huwag kailanman. Hindi na-handle na crash pinapalala ang karanasan ng user. Gumamit ng try/catch na may error logging. Sa debug mode, pinapayagan ang pag-crash para sa mabilis na feedback sa developer. Assertions — para suriin ang mga invariant na hindi dapat labagin, ngunit sa debug builds lamang.

Buod

  • Crash — emergency na pagtatapos ng app na humahantong sa pagkawala ng user at pagbaba ng rating sa mga store
  • NullPointerException — pinakakaraniwang sanhi ng crash sa mobile apps (25% ng lahat ng failure)
  • ANR at OOM — mga kritikal na problemang spesipiko sa Android na nangangailangan ng hiwalay na monitoring at prevention
  • Crashlytics at Sentry — pangunahing tool para sa stack trace collection na may grouping at real-time notification
  • Error handling — optional binding, sealed Result types, at protective checks ay pumipigil sa karamihan ng crash
  • Feature flags at staged rollout — binabawasan ang epekto ng bugs sa audience sa pamamagitan ng pagpayag na ibalik ang problematikong code
  • Pagkatapos ayusin ang crash obligado ang regression test na pumipigil sa pag-ulit ng problema

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