CINXE.COM

<!doctype html><html lang="en"><head><title data-rh="true">Fewer crashes and more stability with Kotlin | by Florina Muntenescu | Android Developers | Medium</title><meta data-rh="true" charset="utf-8"/><meta data-rh="true" name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1"/><meta data-rh="true" name="theme-color" content="#000000"/><meta data-rh="true" name="twitter:app:name:iphone" content="Medium"/><meta data-rh="true" name="twitter:app:id:iphone" content="828256236"/><meta data-rh="true" property="al:ios:app_name" content="Medium"/><meta data-rh="true" property="al:ios:app_store_id" content="828256236"/><meta data-rh="true" property="al:android:package" content="com.medium.reader"/><meta data-rh="true" property="fb:app_id" content="542599432471018"/><meta data-rh="true" property="og:site_name" content="Medium"/><meta data-rh="true" property="og:type" content="article"/><meta data-rh="true" property="article:published_time" content="2020-10-29T15:10:47.776Z"/><meta data-rh="true" name="title" content="Fewer crashes and more stability with Kotlin | by Florina Muntenescu | Android Developers | Medium"/><meta data-rh="true" property="og:title" content="Fewer crashes and more stability with Kotlin"/><meta data-rh="true" property="al:android:url" content="medium://p/b606c6a6ac04"/><meta data-rh="true" property="al:ios:url" content="medium://p/b606c6a6ac04"/><meta data-rh="true" property="al:android:app_name" content="Medium"/><meta data-rh="true" name="description" content="Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging your brand perception. From talking to the community we know…"/><meta data-rh="true" property="og:description" content="Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging…"/><meta data-rh="true" property="og:url" content="https://medium.com/androiddevelopers/fewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04"/><meta data-rh="true" property="al:web:url" content="https://medium.com/androiddevelopers/fewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04"/><meta data-rh="true" property="og:image" content="https://miro.medium.com/v2/resize:fit:1200/1*xpV09u6FyIP96us3K7nDIg.jpeg"/><meta data-rh="true" property="article:author" content="https://medium.com/@florina.muntenescu"/><meta data-rh="true" name="author" content="Florina Muntenescu"/><meta data-rh="true" name="robots" content="index,noarchive,follow,max-image-preview:large"/><meta data-rh="true" name="referrer" content="unsafe-url"/><meta data-rh="true" property="twitter:title" content="Fewer crashes and more stability with Kotlin"/><meta data-rh="true" name="twitter:site" content="@androiddev"/><meta data-rh="true" name="twitter:app:url:iphone" content="medium://p/b606c6a6ac04"/><meta data-rh="true" property="twitter:description" content="Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging…"/><meta data-rh="true" name="twitter:image:src" content="https://miro.medium.com/v2/resize:fit:1200/1*xpV09u6FyIP96us3K7nDIg.jpeg"/><meta data-rh="true" name="twitter:card" content="summary_large_image"/><meta data-rh="true" name="twitter:label1" content="Reading time"/><meta data-rh="true" name="twitter:data1" content="4 min read"/><link data-rh="true" rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19"/><link data-rh="true" rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml"/><link data-rh="true" rel="apple-touch-icon" sizes="152x152" href="https://miro.medium.com/v2/resize:fill:304:304/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="120x120" href="https://miro.medium.com/v2/resize:fill:240:240/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="76x76" href="https://miro.medium.com/v2/resize:fill:152:152/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="apple-touch-icon" sizes="60x60" href="https://miro.medium.com/v2/resize:fill:120:120/10fd5c419ac61637245384e7099e131627900034828f4f386bdaa47a74eae156"/><link data-rh="true" rel="mask-icon" href="https://miro.medium.com/v2/resize:fill:1000:1000/7*GAOKVe--MXbEJmV9230oOQ.png" color="#171717"/><link data-rh="true" rel="preconnect" href="https://glyph.medium.com" crossOrigin=""/><link data-rh="true" id="glyph_preload_link" rel="preload" as="style" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" id="glyph_link" rel="stylesheet" type="text/css" href="https://glyph.medium.com/css/unbound.css"/><link data-rh="true" rel="author" href="https://medium.com/@florina.muntenescu"/><link data-rh="true" rel="canonical" href="https://medium.com/androiddevelopers/fewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04"/><link data-rh="true" rel="alternate" href="android-app://com.medium.reader/https/medium.com/p/b606c6a6ac04"/><script data-rh="true" type="application/ld+json">{"@context":"http:\u002F\u002Fschema.org","@type":"NewsArticle","image":["https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1200\u002F1*xpV09u6FyIP96us3K7nDIg.jpeg"],"url":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04","dateCreated":"2020-10-29T15:10:47.776Z","datePublished":"2020-10-29T15:10:47.776Z","dateModified":"2021-12-16T09:28:09.721Z","headline":"Fewer crashes and more stability with Kotlin - Android Developers - Medium","name":"Fewer crashes and more stability with Kotlin - Android Developers - Medium","description":"Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging your brand perception. From talking to the community we know…","identifier":"b606c6a6ac04","author":{"@type":"Person","name":"Florina Muntenescu","url":"https:\u002F\u002Fmedium.com\u002F@florina.muntenescu"},"creator":["Florina Muntenescu"],"publisher":{"@type":"Organization","name":"Android Developers","url":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers","logo":{"@type":"ImageObject","width":500,"height":60,"url":"https:\u002F\u002Fmiro.medium.com\u002Fv2\u002Fresize:fit:1000\u002F1*5pMw_nx55x_66tk77kutPQ.png"}},"mainEntityOfPage":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04"}</script><style type="text/css" data-fela-rehydration="547" data-fela-type="STATIC">html{box-sizing:border-box;-webkit-text-size-adjust:100%}*, *:before, *:after{box-sizing:inherit}body{margin:0;padding:0;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;color:rgba(0,0,0,0.8);position:relative;min-height:100vh}h1, h2, h3, h4, h5, h6, dl, dd, ol, ul, menu, figure, blockquote, p, pre, form{margin:0}menu, ol, ul{padding:0;list-style:none;list-style-image:none}main{display:block}a{color:inherit;text-decoration:none}a, button, input{-webkit-tap-highlight-color:transparent}img, svg{vertical-align:middle}button{background:transparent;overflow:visible}button, input, optgroup, select, textarea{margin:0}:root{--reach-tabs:1;--reach-menu-button:1}#speechify-root{font-family:Sohne, sans-serif}div[data-popper-reference-hidden="true"]{visibility:hidden;pointer-events:none}.grecaptcha-badge{visibility:hidden} /*XCode style (c) Angel Garcia <angelgarcia.mail@gmail.com>*/.hljs {background: #fff;color: black; }/* Gray DOCTYPE selectors like WebKit */ .xml .hljs-meta {color: #c0c0c0; }.hljs-comment, .hljs-quote {color: #007400; }.hljs-tag, .hljs-attribute, .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-name {color: #aa0d91; }.hljs-variable, .hljs-template-variable {color: #3F6E74; }.hljs-code, .hljs-string, .hljs-meta .hljs-string {color: #c41a16; }.hljs-regexp, .hljs-link {color: #0E0EFF; }.hljs-title, .hljs-symbol, .hljs-bullet, .hljs-number {color: #1c00cf; }.hljs-section, .hljs-meta {color: #643820; }.hljs-title.class_, .hljs-class .hljs-title, .hljs-type, .hljs-built_in, .hljs-params {color: #5c2699; }.hljs-attr {color: #836C28; }.hljs-subst {color: #000; }.hljs-formula {background-color: #eee;font-style: italic; }.hljs-addition {background-color: #baeeba; }.hljs-deletion {background-color: #ffc8bd; }.hljs-selector-id, .hljs-selector-class {color: #9b703f; }.hljs-doctag, .hljs-strong {font-weight: bold; }.hljs-emphasis {font-style: italic; } </style><style type="text/css" data-fela-rehydration="547" data-fela-type="KEYFRAME">@-webkit-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@-moz-keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}@keyframes k1{0%{opacity:0.8}50%{opacity:0.5}100%{opacity:0.8}}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE">.a{font-family:medium-content-sans-serif-font, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif}.b{font-weight:400}.c{background-color:rgba(255, 255, 255, 1)}.l{display:block}.m{position:sticky}.n{top:0}.o{z-index:500}.p{padding:0 24px}.q{align-items:center}.r{border-bottom:solid 1px #F2F2F2}.y{height:41px}.z{line-height:20px}.ab{display:flex}.ac{height:57px}.ae{flex:1 0 auto}.af{color:inherit}.ag{fill:inherit}.ah{font-size:inherit}.ai{border:inherit}.aj{font-family:inherit}.ak{letter-spacing:inherit}.al{font-weight:inherit}.am{padding:0}.an{margin:0}.ao{cursor:pointer}.ap:disabled{cursor:not-allowed}.aq:disabled{color:#6B6B6B}.ar:disabled{fill:#6B6B6B}.au{width:auto}.av path{fill:#242424}.aw{height:25px}.ax{margin-left:16px}.ay{border:none}.az{border-radius:20px}.ba{width:240px}.bb{background:#F9F9F9}.bc path{fill:#6B6B6B}.be{outline:none}.bf{font-family:sohne, "Helvetica Neue", Helvetica, Arial, sans-serif}.bg{font-size:14px}.bh{width:100%}.bi{padding:10px 20px 10px 0}.bj{background-color:transparent}.bk{color:#242424}.bl::placeholder{color:#6B6B6B}.bm{display:inline-block}.bn{margin-left:12px}.bo{margin-right:12px}.bp{border-radius:4px}.bq{margin-left:24px}.br{height:24px}.bx{background-color:#F9F9F9}.by{border-radius:50%}.bz{height:32px}.ca{width:32px}.cb{justify-content:center}.ch{max-width:680px}.ci{min-width:0}.cj{animation:k1 1.2s ease-in-out infinite}.ck{height:100vh}.cl{margin-bottom:16px}.cm{margin-top:48px}.cn{align-items:flex-start}.co{flex-direction:column}.cp{justify-content:space-between}.cq{margin-bottom:24px}.cw{width:80%}.cx{background-color:#F2F2F2}.dd{height:44px}.de{width:44px}.df{margin:auto 0}.dg{margin-bottom:4px}.dh{height:16px}.di{width:120px}.dj{width:80px}.dp{margin-bottom:8px}.dq{width:96%}.dr{width:98%}.ds{width:81%}.dt{margin-left:8px}.du{color:#6B6B6B}.dv{font-size:13px}.dw{height:100%}.ep{color:#FFFFFF}.eq{fill:#FFFFFF}.er{background:rgba(132, 132, 136, 1)}.es{border-color:rgba(132, 132, 136, 1)}.ew:disabled{cursor:inherit !important}.ex:disabled{opacity:0.3}.ey:disabled:hover{background:rgba(132, 132, 136, 1)}.ez:disabled:hover{border-color:rgba(132, 132, 136, 1)}.fa{border-radius:99em}.fb{border-width:1px}.fc{border-style:solid}.fd{box-sizing:border-box}.fe{text-decoration:none}.ff{text-align:center}.fi{margin-right:32px}.fj{position:relative}.fk{fill:#6B6B6B}.fn{background:transparent}.fo svg{margin-left:4px}.fp svg{fill:#6B6B6B}.fr{box-shadow:inset 0 0 0 1px rgba(0, 0, 0, 0.05)}.fs{position:absolute}.fz{margin:0 24px}.gd{background:rgba(255, 255, 255, 1)}.ge{border:1px solid #F2F2F2}.gf{box-shadow:0 1px 4px #F2F2F2}.gg{max-height:100vh}.gh{overflow-y:auto}.gi{left:0}.gj{top:calc(100vh + 100px)}.gk{bottom:calc(100vh + 100px)}.gl{width:10px}.gm{pointer-events:none}.gn{word-break:break-word}.go{word-wrap:break-word}.gp:after{display:block}.gq:after{content:""}.gr:after{clear:both}.gs{clear:both}.gt{margin-top:0px}.gu{max-width:100%}.gv{height:auto}.gw{line-height:1.23}.gx{letter-spacing:0}.gy{font-style:normal}.gz{font-weight:700}.ie{align-items:baseline}.if{width:48px}.ig{height:48px}.ih{border:2px solid rgba(255, 255, 255, 1)}.ii{z-index:0}.ij{box-shadow:none}.ik{border:1px solid rgba(0, 0, 0, 0.05)}.il{margin-left:-12px}.im{width:28px}.in{height:28px}.io{z-index:1}.ip{width:24px}.iq{margin-bottom:2px}.ir{flex-wrap:nowrap}.is{font-size:16px}.it{line-height:24px}.iv{margin:0 8px}.iw{display:inline}.ix{color:rgba(132, 132, 136, 1)}.iy{fill:rgba(132, 132, 136, 1)}.jb{flex:0 0 auto}.je{flex-wrap:wrap}.jf{white-space:pre-wrap}.jg{margin-right:4px}.jh{overflow:hidden}.ji{max-height:20px}.jj{text-overflow:ellipsis}.jk{display:-webkit-box}.jl{-webkit-line-clamp:1}.jm{-webkit-box-orient:vertical}.jn{word-break:break-all}.jp{padding-left:8px}.jq{padding-right:8px}.kr> *{flex-shrink:0}.ks{overflow-x:scroll}.kt::-webkit-scrollbar{display:none}.ku{scrollbar-width:none}.kv{-ms-overflow-style:none}.kw{width:74px}.kx{flex-direction:row}.ky{z-index:2}.lb{-webkit-user-select:none}.lc{border:0}.ld{fill:rgba(117, 117, 117, 1)}.lg{outline:0}.lh{user-select:none}.li> svg{pointer-events:none}.lr{cursor:progress}.ls{opacity:1}.lt{padding:4px 0}.lw{width:16px}.ly{display:inline-flex}.me{padding:8px 2px}.mf svg{color:#6B6B6B}.mw{line-height:1.58}.mx{letter-spacing:-0.004em}.my{font-family:source-serif-pro, Georgia, Cambria, "Times New Roman", Times, serif}.nt{margin-bottom:-0.46em}.nu{line-height:1.12}.nv{letter-spacing:-0.022em}.nw{font-weight:600}.or{margin-bottom:-0.28em}.ox{list-style-type:disc}.oy{margin-left:30px}.oz{padding-left:0px}.pf{padding-left:30px}.pg{line-height:40px}.ph{letter-spacing:-0.009em}.pi{font-weight:300}.pj{font-size:28px}.pu{padding:2px 4px}.pv{font-size:75%}.pw> strong{font-family:inherit}.px{font-family:source-code-pro, Menlo, Monaco, "Courier New", Courier, monospace}.py{text-decoration:underline}.qe{line-height:1.18}.qs{margin-bottom:-0.31em}.qt{margin-bottom:26px}.qu{margin-top:6px}.qv{margin-top:8px}.qw{margin-right:8px}.qx{padding:8px 16px}.qy{border-radius:100px}.qz{transition:background 300ms ease}.rb{white-space:nowrap}.rc{border-top:none}.rd{margin-bottom:50px}.re{height:52px}.rf{max-height:52px}.rg{box-sizing:content-box}.rh{position:static}.rj{max-width:155px}.rp{margin-right:20px}.rq{margin-bottom:64px}.rr{margin-bottom:48px}.sf{border-radius:2px}.sh{height:64px}.si{width:64px}.sj{align-self:flex-end}.sk{flex:1 1 auto}.sq{padding-right:4px}.sr{font-weight:500}.sy{margin-top:16px}.sz{color:rgba(255, 255, 255, 1)}.ta{fill:rgba(255, 255, 255, 1)}.tb{background:rgba(25, 25, 25, 1)}.tc{border-color:rgba(25, 25, 25, 1)}.tf:disabled{opacity:0.1}.tg:disabled:hover{background:rgba(25, 25, 25, 1)}.th:disabled:hover{border-color:rgba(25, 25, 25, 1)}.ti{margin-bottom:54px}.tj{height:0px}.tk{gap:18px}.tl{fill:rgba(61, 61, 61, 1)}.tx{border-bottom:solid 1px #E5E5E5}.ty{margin-top:72px}.tz{padding:24px 0}.ua{margin-bottom:0px}.ub{margin-right:16px}.as:hover:not(:disabled){color:rgba(25, 25, 25, 1)}.at:hover:not(:disabled){fill:rgba(25, 25, 25, 1)}.et:hover{background:rgba(113, 114, 117, 1)}.eu:hover{border-color:rgba(113, 114, 117, 1)}.ev:hover{cursor:pointer}.fl:hover{color:#242424}.fm:hover{fill:#242424}.fq:hover svg{fill:#242424}.ft:hover{background-color:rgba(0, 0, 0, 0.1)}.iu:hover{text-decoration:underline}.iz:hover:not(:disabled){color:rgba(113, 114, 117, 1)}.ja:hover:not(:disabled){fill:rgba(113, 114, 117, 1)}.lf:hover{fill:rgba(8, 8, 8, 1)}.lu:hover{fill:#000000}.lv:hover p{color:#000000}.lx:hover{color:#000000}.mg:hover svg{color:#000000}.ra:hover{background-color:#F2F2F2}.sg:hover{background-color:none}.td:hover{background:#000000}.te:hover{border-color:#242424}.tm:hover{fill:rgba(25, 25, 25, 1)}.bd:focus-within path{fill:#242424}.le:focus{fill:rgba(8, 8, 8, 1)}.mh:focus svg{color:#000000}.lj:active{border-style:none}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (min-width: 1080px)">.d{display:none}.bw{width:64px}.cg{margin:0 64px}.cv{height:48px}.dc{margin-bottom:52px}.do{margin-bottom:48px}.ef{font-size:14px}.eg{line-height:20px}.em{font-size:13px}.eo{padding:5px 12px}.fh{display:flex}.fy{margin-bottom:50px}.gc{max-width:680px}.hu{font-size:42px}.hv{margin-top:1em}.hw{margin-bottom:32px}.hx{line-height:52px}.hy{letter-spacing:-0.011em}.id{align-items:center}.kd{border-top:solid 1px #F2F2F2}.ke{border-bottom:solid 1px #F2F2F2}.kf{margin:32px 0 0}.kg{padding:3px 8px}.kp> *{margin-right:24px}.kq> :last-child{margin-right:0}.lq{margin-top:0px}.md{margin:0}.np{font-size:20px}.nq{margin-top:2.14em}.nr{line-height:32px}.ns{letter-spacing:-0.003em}.on{font-size:24px}.oo{margin-top:1.95em}.op{line-height:30px}.oq{letter-spacing:-0.016em}.ow{margin-top:0.94em}.pe{margin-top:1.14em}.po{margin-top:2.75em}.pt{margin-top:2.64em}.qd{margin-top:1.75em}.qp{margin-top:1.72em}.qq{line-height:24px}.qr{letter-spacing:0}.ro{display:inline-block}.rs{flex-direction:row}.rv{margin-bottom:0}.rw{margin-right:20px}.sl{max-width:500px}.tr{margin:40px 0 0}.tw{padding-top:72px}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (max-width: 1079.98px)">.e{display:none}.lp{margin-top:0px}.rn{display:inline-block}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (max-width: 903.98px)">.f{display:none}.lo{margin-top:0px}.rm{display:inline-block}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (max-width: 727.98px)">.g{display:none}.lm{margin-top:0px}.ln{margin-right:0px}.rl{display:inline-block}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (max-width: 551.98px)">.h{display:none}.s{display:flex}.t{justify-content:space-between}.bs{width:24px}.cc{margin:0 24px}.cr{height:40px}.cy{margin-bottom:44px}.dk{margin-bottom:32px}.dx{font-size:13px}.dy{line-height:20px}.eh{padding:0px 8px 1px}.fu{margin-bottom:2px}.ha{font-size:32px}.hb{margin-top:1.01em}.hc{margin-bottom:24px}.hd{line-height:38px}.he{letter-spacing:-0.014em}.hz{align-items:flex-start}.jc{flex-direction:column}.jr{margin:24px -24px 0}.js{padding:0}.kh> *{margin-right:8px}.ki> :last-child{margin-right:24px}.kz{margin-left:0px}.lk{margin-top:0px}.ll{margin-right:0px}.lz{margin:0}.mi{border:1px solid #F2F2F2}.mj{border-radius:99em}.mk{padding:0px 16px 0px 12px}.ml{height:38px}.mm{align-items:center}.mo svg{margin-right:8px}.mz{font-size:18px}.na{margin-top:1.56em}.nb{line-height:28px}.nc{letter-spacing:-0.003em}.nx{font-size:20px}.ny{margin-top:1.2em}.nz{line-height:24px}.oa{letter-spacing:0}.os{margin-top:0.67em}.pa{margin-top:1.34em}.pk{margin-top:1.42em}.pp{margin-top:2em}.pz{margin-top:1.08em}.qf{font-size:16px}.qg{margin-top:1.23em}.rk{display:inline-block}.sd{margin-bottom:20px}.se{margin-right:0}.sp{max-width:100%}.ss{font-size:24px}.st{line-height:30px}.su{letter-spacing:-0.016em}.tn{margin:32px 0 0}.ts{padding-top:48px}.mn:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (min-width: 904px) and (max-width: 1079.98px)">.i{display:none}.bv{width:64px}.cf{margin:0 64px}.cu{height:48px}.db{margin-bottom:52px}.dn{margin-bottom:48px}.ed{font-size:14px}.ee{line-height:20px}.ek{font-size:13px}.el{padding:5px 12px}.fg{display:flex}.fx{margin-bottom:50px}.gb{max-width:680px}.hp{font-size:42px}.hq{margin-top:1em}.hr{margin-bottom:32px}.hs{line-height:52px}.ht{letter-spacing:-0.011em}.ic{align-items:center}.jz{border-top:solid 1px #F2F2F2}.ka{border-bottom:solid 1px #F2F2F2}.kb{margin:32px 0 0}.kc{padding:3px 8px}.kn> *{margin-right:24px}.ko> :last-child{margin-right:0}.mc{margin:0}.nl{font-size:20px}.nm{margin-top:2.14em}.nn{line-height:32px}.no{letter-spacing:-0.003em}.oj{font-size:24px}.ok{margin-top:1.95em}.ol{line-height:30px}.om{letter-spacing:-0.016em}.ov{margin-top:0.94em}.pd{margin-top:1.14em}.pn{margin-top:2.75em}.ps{margin-top:2.64em}.qc{margin-top:1.75em}.qm{margin-top:1.72em}.qn{line-height:24px}.qo{letter-spacing:0}.rt{flex-direction:row}.rx{margin-bottom:0}.ry{margin-right:20px}.sm{max-width:500px}.tq{margin:40px 0 0}.tv{padding-top:72px}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (min-width: 728px) and (max-width: 903.98px)">.j{display:none}.w{display:flex}.x{justify-content:space-between}.bu{width:64px}.ce{margin:0 48px}.ct{height:48px}.da{margin-bottom:52px}.dm{margin-bottom:48px}.eb{font-size:13px}.ec{line-height:20px}.ej{padding:0px 8px 1px}.fw{margin-bottom:50px}.ga{max-width:680px}.hk{font-size:42px}.hl{margin-top:1em}.hm{margin-bottom:32px}.hn{line-height:52px}.ho{letter-spacing:-0.011em}.ib{align-items:center}.jv{border-top:solid 1px #F2F2F2}.jw{border-bottom:solid 1px #F2F2F2}.jx{margin:32px 0 0}.jy{padding:3px 8px}.kl> *{margin-right:24px}.km> :last-child{margin-right:0}.mb{margin:0}.nh{font-size:20px}.ni{margin-top:2.14em}.nj{line-height:32px}.nk{letter-spacing:-0.003em}.of{font-size:24px}.og{margin-top:1.95em}.oh{line-height:30px}.oi{letter-spacing:-0.016em}.ou{margin-top:0.94em}.pc{margin-top:1.14em}.pm{margin-top:2.75em}.pr{margin-top:2.64em}.qb{margin-top:1.75em}.qj{margin-top:1.72em}.qk{line-height:24px}.ql{letter-spacing:0}.ru{flex-direction:row}.rz{margin-bottom:0}.sa{margin-right:20px}.sn{max-width:500px}.tp{margin:40px 0 0}.tu{padding-top:72px}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="all and (min-width: 552px) and (max-width: 727.98px)">.k{display:none}.u{display:flex}.v{justify-content:space-between}.bt{width:24px}.cd{margin:0 24px}.cs{height:40px}.cz{margin-bottom:44px}.dl{margin-bottom:32px}.dz{font-size:13px}.ea{line-height:20px}.ei{padding:0px 8px 1px}.fv{margin-bottom:2px}.hf{font-size:32px}.hg{margin-top:1.01em}.hh{margin-bottom:24px}.hi{line-height:38px}.hj{letter-spacing:-0.014em}.ia{align-items:flex-start}.jd{flex-direction:column}.jt{margin:24px 0 0}.ju{padding:0}.kj> *{margin-right:8px}.kk> :last-child{margin-right:8px}.la{margin-left:0px}.ma{margin:0}.mp{border:1px solid #F2F2F2}.mq{border-radius:99em}.mr{padding:0px 16px 0px 12px}.ms{height:38px}.mt{align-items:center}.mv svg{margin-right:8px}.nd{font-size:18px}.ne{margin-top:1.56em}.nf{line-height:28px}.ng{letter-spacing:-0.003em}.ob{font-size:20px}.oc{margin-top:1.2em}.od{line-height:24px}.oe{letter-spacing:0}.ot{margin-top:0.67em}.pb{margin-top:1.34em}.pl{margin-top:1.42em}.pq{margin-top:2em}.qa{margin-top:1.08em}.qh{font-size:16px}.qi{margin-top:1.23em}.sb{margin-bottom:20px}.sc{margin-right:0}.so{max-width:100%}.sv{font-size:24px}.sw{line-height:30px}.sx{letter-spacing:-0.016em}.to{margin:32px 0 0}.tt{padding-top:48px}.mu:hover{border-color:#E5E5E5}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="print">.ri{display:none}</style><style type="text/css" data-fela-rehydration="547" data-fela-type="RULE" media="(orientation: landscape) and (max-width: 903.98px)">.jo{max-height:none}</style></head><body><div id="root"><div class="a b c"><div class="d e f g h i j k"></div><script>document.domain = document.domain;</script><div class="l c"><div class="l m n o c"><div class="p q r s t u v w x i d y z"><a class="du ag dv bf ak b am an ao ap aq ar as at s u w i d q dw z" href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com%2Fp%2Fb606c6a6ac04&amp;%7Efeature=LoOpenInAppButton&amp;%7Echannel=ShowPostUnderCollection&amp;source=---top_nav_layout_nav-----------------------------------------" rel="noopener follow">Open in app<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" fill="none" viewBox="0 0 10 10" class="dt"><path fill="currentColor" d="M.985 8.485a.375.375 0 1 0 .53.53zM8.75 1.25h.375A.375.375 0 0 0 8.75.875zM8.375 6.5a.375.375 0 1 0 .75 0zM3.5.875a.375.375 0 1 0 0 .75zm-1.985 8.14 7.5-7.5-.53-.53-7.5 7.5zm6.86-7.765V6.5h.75V1.25zM3.5 1.625h5.25v-.75H3.5z"></path></svg></a><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" rel="noopener follow" href="/m/signin?operation=login&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;source=post_page---top_nav_layout_nav-----------------------global_nav------------------">Sign in</a></span></p></div></div></div><div class="p q r ab ac"><div class="ab q ae"><a class="af ag ah ai aj ak al am an ao ap aq ar as at ab" aria-label="Homepage" data-testid="headerMediumLogo" rel="noopener follow" href="/?source=---top_nav_layout_nav-----------------------------------------"><svg xmlns="http://www.w3.org/2000/svg" width="719" height="160" fill="none" viewBox="0 0 719 160" class="au av aw"><path fill="#242424" d="m174.104 9.734.215-.047V8.02H130.39L89.6 103.89 48.81 8.021H1.472v1.666l.212.047c8.018 1.81 12.09 4.509 12.09 14.242V137.93c0 9.734-4.087 12.433-12.106 14.243l-.212.047v1.671h32.118v-1.665l-.213-.048c-8.018-1.809-12.089-4.509-12.089-14.242V30.586l52.399 123.305h2.972l53.925-126.743V140.75c-.687 7.688-4.721 10.062-11.982 11.701l-.215.05v1.652h55.948v-1.652l-.215-.05c-7.269-1.639-11.4-4.013-12.087-11.701l-.037-116.774h.037c0-9.733 4.071-12.432 12.087-14.242m25.555 75.488c.915-20.474 8.268-35.252 20.606-35.507 3.806.063 6.998 1.312 9.479 3.714 5.272 5.118 7.751 15.812 7.368 31.793zm-.553 5.77h65.573v-.275c-.186-15.656-4.721-27.834-13.466-36.196-7.559-7.227-18.751-11.203-30.507-11.203h-.263c-6.101 0-13.584 1.48-18.909 4.16-6.061 2.807-11.407 7.003-15.855 12.511-7.161 8.874-11.499 20.866-12.554 34.343q-.05.606-.092 1.212a50 50 0 0 0-.065 1.151 85.807 85.807 0 0 0-.094 5.689c.71 30.524 17.198 54.917 46.483 54.917 25.705 0 40.675-18.791 44.407-44.013l-1.886-.664c-6.557 13.556-18.334 21.771-31.738 20.769-18.297-1.369-32.314-19.922-31.042-42.395m139.722 41.359c-2.151 5.101-6.639 7.908-12.653 7.908s-11.513-4.129-15.418-11.63c-4.197-8.053-6.405-19.436-6.405-32.92 0-28.067 8.729-46.22 22.24-46.22 5.657 0 10.111 2.807 12.236 7.704zm43.499 20.008c-8.019-1.897-12.089-4.722-12.089-14.951V1.309l-48.716 14.353v1.757l.299-.024c6.72-.543 11.278.386 13.925 2.83 2.072 1.915 3.082 4.853 3.082 8.987v18.66c-4.803-3.067-10.516-4.56-17.448-4.56-14.059 0-26.909 5.92-36.176 16.672-9.66 11.205-14.767 26.518-14.767 44.278-.003 31.72 15.612 53.039 38.851 53.039 13.595 0 24.533-7.449 29.54-20.013v16.865h43.711v-1.746zM424.1 19.819c0-9.904-7.468-17.374-17.375-17.374-9.859 0-17.573 7.632-17.573 17.374s7.721 17.374 17.573 17.374c9.907 0 17.375-7.47 17.375-17.374m11.499 132.546c-8.019-1.897-12.089-4.722-12.089-14.951h-.035V43.635l-43.714 12.551v1.705l.263.024c9.458.842 12.047 4.1 12.047 15.152v81.086h43.751v-1.746zm112.013 0c-8.018-1.897-12.089-4.722-12.089-14.951V43.635l-41.621 12.137v1.71l.246.026c7.733.813 9.967 4.257 9.967 15.36v59.279c-2.578 5.102-7.415 8.131-13.274 8.336-9.503 0-14.736-6.419-14.736-18.073V43.638l-43.714 12.55v1.703l.262.024c9.459.84 12.05 4.097 12.05 15.152v50.17a56.3 56.3 0 0 0 .91 10.444l.787 3.423c3.701 13.262 13.398 20.197 28.59 20.197 12.868 0 24.147-7.966 29.115-20.43v17.311h43.714v-1.747zm169.818 1.788v-1.749l-.213-.05c-8.7-2.006-12.089-5.789-12.089-13.49v-63.79c0-19.89-11.171-31.761-29.883-31.761-13.64 0-25.141 7.882-29.569 20.16-3.517-13.01-13.639-20.16-28.606-20.16-13.146 0-23.449 6.938-27.869 18.657V43.643L545.487 55.68v1.715l.263.024c9.345.829 12.047 4.181 12.047 14.95v81.784h40.787v-1.746l-.215-.053c-6.941-1.631-9.181-4.606-9.181-12.239V66.998c1.836-4.289 5.537-9.37 12.853-9.37 9.086 0 13.692 6.296 13.692 18.697v77.828h40.797v-1.746l-.215-.053c-6.94-1.631-9.18-4.606-9.18-12.239V75.066a42 42 0 0 0-.578-7.26c1.947-4.661 5.86-10.177 13.475-10.177 9.214 0 13.691 6.114 13.691 18.696v77.828z"></path></svg></a><div class="ax h"><div class="ab ay az ba bb q bc bd"><div class="bm" aria-hidden="false" aria-describedby="searchResults" aria-labelledby="searchResults"></div><div class="bn bo ab"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div><input role="combobox" aria-controls="searchResults" aria-expanded="false" aria-label="search" data-testid="headerSearchInput" tabindex="0" class="ay be bf bg z bh bi bj bk bl" placeholder="Search" value=""/></div></div></div><div class="h k w fg fh"><div class="fi ab"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerWriteButton" rel="noopener follow" href="/m/signin?operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fnew-story&amp;source=---top_nav_layout_nav-----------------------new_post_topnav------------------"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Write"><path fill="currentColor" d="M14 4a.5.5 0 0 0 0-1zm7 6a.5.5 0 0 0-1 0zm-7-7H4v1h10zM3 4v16h1V4zm1 17h16v-1H4zm17-1V10h-1v10zm-1 1a1 1 0 0 0 1-1h-1zM3 20a1 1 0 0 0 1 1v-1zM4 3a1 1 0 0 0-1 1h1z"></path><path stroke="currentColor" d="m17.5 4.5-8.458 8.458a.25.25 0 0 0-.06.098l-.824 2.47a.25.25 0 0 0 .316.316l2.47-.823a.25.25 0 0 0 .098-.06L19.5 6.5m-2-2 2.323-2.323a.25.25 0 0 1 .354 0l1.646 1.646a.25.25 0 0 1 0 .354L19.5 6.5m-2-2 2 2"></path></svg><div class="dt l">Write</div></div></a></span></div></div><div class="k j i d"><div class="fi ab"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSearchButton" rel="noopener follow" href="/search?source=---top_nav_layout_nav-----------------------------------------"><div class="bf b bg z du fj fk ab q fl fm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" aria-label="Search"><path fill="currentColor" fill-rule="evenodd" d="M4.092 11.06a6.95 6.95 0 1 1 13.9 0 6.95 6.95 0 0 1-13.9 0m6.95-8.05a8.05 8.05 0 1 0 5.13 14.26l3.75 3.75a.56.56 0 1 0 .79-.79l-3.73-3.73A8.05 8.05 0 0 0 11.042 3z" clip-rule="evenodd"></path></svg></div></a></div></div><div class="fi h k j"><div class="ab q"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><button class="bf b dx dy eh dz ea ei eb ec ej ek ee el em eg eo ep eq er es et eu ev ew ex ey ez fa fb fc fd bm fe ff" data-testid="headerSignUpButton">Sign up</button></span></p><div class="ax l"><p class="bf b dx dy dz ea eb ec ed ee ef eg du"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerSignInButton" rel="noopener follow" href="/m/signin?operation=login&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;source=post_page---top_nav_layout_nav-----------------------global_nav------------------">Sign in</a></span></p></div></div></div><div class="l" aria-hidden="false"><button class="ay fn am ab q ao fo fp fq" aria-label="user options menu" data-testid="headerUserIcon"><div class="l fj"><img alt="" class="l fd by bz ca cx" src="https://miro.medium.com/v2/resize:fill:64:64/1*dmbNkD5D-u45r44go_cf0g.png" width="32" height="32" loading="lazy" role="presentation"/><div class="fr by l bz ca fs n ay ft"></div></div></button></div></div></div><div class="l"><div class="fu fv fw fx fy l"><div class="ab cb"><div class="ci bh fz ga gb gc"></div></div><article><div class="l"><div class="l"><span class="l"></span><section><div><div class="fs gi gj gk gl gm"></div><div class="gn go gp gq gr"><div class="gs bh"><figure class="gt gs bh paragraph-image"><picture><source srcSet="https://miro.medium.com/v2/resize:fit:640/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 1100w, https://miro.medium.com/v2/resize:fit:4800/format:webp/1*xpV09u6FyIP96us3K7nDIg.jpeg 4800w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 100vw" type="image/webp"/><source data-testid="og" srcSet="https://miro.medium.com/v2/resize:fit:640/1*xpV09u6FyIP96us3K7nDIg.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*xpV09u6FyIP96us3K7nDIg.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*xpV09u6FyIP96us3K7nDIg.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*xpV09u6FyIP96us3K7nDIg.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*xpV09u6FyIP96us3K7nDIg.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*xpV09u6FyIP96us3K7nDIg.jpeg 1100w, https://miro.medium.com/v2/resize:fit:4800/1*xpV09u6FyIP96us3K7nDIg.jpeg 4800w" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 100vw"/><img alt="" class="bh gu gv c" width="2400" height="2611" loading="eager" role="presentation"/></picture></figure></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div><h1 id="50da" class="pw-post-title gw gx gy bf gz ha hb hc hd he hf hg hh hi hj hk hl hm hn ho hp hq hr hs ht hu hv hw hx hy bk" data-testid="storyTitle">Fewer crashes and more stability with Kotlin</h1><div><div class="speechify-ignore ab cp"><div class="speechify-ignore bh l"><div class="hz ia ib ic id ab"><div><div class="ab ie"><div><div class="bm" aria-hidden="false"><a rel="noopener follow" href="/@florina.muntenescu?source=post_page---byline--b606c6a6ac04---------------------------------------"><div class="l if ig by ih ii"><div class="l fj"><img alt="Florina Muntenescu" class="l fd by dd de cx" src="https://miro.medium.com/v2/resize:fill:88:88/1*z2H2HkOuv5bAOuIvUUN-5w.jpeg" width="44" height="44" loading="lazy" data-testid="authorPhoto"/><div class="ij by l dd de fs n ik ft"></div></div></div></a></div></div><div class="il ab fj"><div><div class="bm" aria-hidden="false"><a href="https://medium.com/androiddevelopers?source=post_page---byline--b606c6a6ac04---------------------------------------" rel="noopener follow"><div class="l im in by ih io"><div class="l fj"><img alt="Android Developers" class="l fd by br ip cx" src="https://miro.medium.com/v2/resize:fill:48:48/1*4Tg6pPzer7cIarYaszIKaQ.png" width="24" height="24" loading="lazy" data-testid="publicationPhoto"/><div class="ij by l br ip fs n ik ft"></div></div></div></a></div></div></div></div></div><div class="bn bh l"><div class="ab"><div style="flex:1"><span class="bf b bg z bk"><div class="iq ab q"><div class="ab q ir"><div class="ab q"><div><div class="bm" aria-hidden="false"><p class="bf b is it bk"><a class="af ag ah ai aj ak al am an ao ap aq ar iu" data-testid="authorName" rel="noopener follow" href="/@florina.muntenescu?source=post_page---byline--b606c6a6ac04---------------------------------------">Florina Muntenescu</a></p></div></div></div><span class="iv iw" aria-hidden="true"><span class="bf b bg z du">·</span></span><p class="bf b is it du"><span><a class="ix iy ah ai aj ak al am an ao ap aq ar ex iz ja" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fsubscribe%2Fuser%2Fd5885adb1ddf&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;user=Florina+Muntenescu&amp;userId=d5885adb1ddf&amp;source=post_page-d5885adb1ddf--byline--b606c6a6ac04---------------------post_header------------------">Follow</a></span></p></div></div></span></div></div><div class="l jb"><span class="bf b bg z du"><div class="ab cn jc jd je"><div class="fu fv ab"><div class="bf b bg z du ab jf"><span class="jg l jb">Published in</span><div><div class="l" aria-hidden="false"><a class="af ag ah ai aj ak al am an ao ap aq ar iu ab q" data-testid="publicationName" href="https://medium.com/androiddevelopers?source=post_page---byline--b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b bg z jh ji jj jk jl jm jn jo bk">Android Developers</p></a></div></div></div><div class="h k"><span class="iv iw" aria-hidden="true"><span class="bf b bg z du">·</span></span></div></div><span class="bf b bg z du"><div class="ab ae"><span data-testid="storyReadTime">4 min read</span><div class="jp jq l" aria-hidden="true"><span class="l" aria-hidden="true"><span class="bf b bg z du">·</span></span></div><span data-testid="storyPublishDate">Oct 29, 2020</span></div></span></div></span></div></div></div><div class="ab cp jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg"><div class="h k w fg fh q"><div class="kw l"><div class="ab q kx ky"><div class="pw-multi-vote-icon fj jg kz la lb"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fandroiddevelopers%2Fb606c6a6ac04&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;user=Florina+Muntenescu&amp;userId=d5885adb1ddf&amp;source=---header_actions--b606c6a6ac04---------------------clap_footer------------------"><div><div class="bm" aria-hidden="false"><div class="lc ao ld le lf lg am lh li lj lb"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l lk ll lm ln lo lp lq"><p class="bf b dv z du"><span class="lr">--</span></p></div></div></div><div><div class="bm" aria-hidden="false"><button class="ao lc ls lt ab q fk lu lv" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="gt"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg></button></div></div></div><div class="ab q kh ki kj kk kl km kn ko kp kq kr ks kt ku kv"><div class="lw k j i d"></div><div class="h k"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="headerBookmarkButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fb606c6a6ac04&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;source=---header_actions--b606c6a6ac04---------------------bookmark_footer------------------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lx" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="fd ly cn"><div class="l ae"><div class="ab cb"><div class="lz ma mb mc md gu ci bh"><div class="ab"><div class="bm" aria-hidden="false"><div><div class="bm" aria-hidden="false"><button aria-label="Listen" data-testid="audioPlayButton" class="af fk ah ai aj ak al me an ao ap ex mf mg lv mh mi mj mk ml s mm mn mo mp mq mr ms u mt mu mv"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0m9-10C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2m3.376 10.416-4.599 3.066a.5.5 0 0 1-.777-.416V8.934a.5.5 0 0 1 .777-.416l4.599 3.066a.5.5 0 0 1 0 .832" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Listen</p></div></button></div></div></div></div></div></div></div></div><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="headerSocialShareButton" class="af fk ah ai aj ak al me an ao ap ex mf mg lv mh mi mj mk ml s mm mn mo mp mq mr ms u mt mu mv"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg><div class="j i d"><p class="bf b bg z du">Share</p></div></button></div></div></div></div></div></div></div></div></div><p id="10bb" class="pw-post-body-paragraph mw mx gy my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging your brand perception. From talking to the community we know that one of the main reasons to adopt Kotlin is safer code. In this post I’ll share a couple of the ways Kotlin improved the stability of a few of our partners’ code but we’ll also look at the results of some Google Play store stats and see if there’s a correlation between using Kotlin and the number of crashes (spoilers: there is!).</p><h1 id="d7b5" class="nu nv gy bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">App quality</h1><p id="9b6a" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">The quality of your app doesn’t only have an impact on your user experience. There are several other elements that will be affected by a high number of crashes:</p><ul class=""><li id="1730" class="mw mx gy my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt ox oy oz bk"><strong class="my gz">App discoverability</strong> — Google Play store’s recommendations are composed of a mix of human curation and algorithmic calculations, of which quality is one of the largest considerations.</li><li id="28fd" class="mw mx gy my b mz pa nb nc nd pb nf ng nh pc nj nk nl pd nn no np pe nr ns nt ox oy oz bk"><strong class="my gz">Brand</strong> — Your product performance can impact your ratings and reviews, which can impact brand perception.</li><li id="fb95" class="mw mx gy my b mz pa nb nc nd pb nf ng nh pc nj nk nl pd nn no np pe nr ns nt ox oy oz bk"><strong class="my gz">Higher number of (engaged) users</strong> — Having improved organic traffic and brand perception can lead to better user acquisition and retention, which can also impact engagement and lower funnel metrics.</li></ul><blockquote class="pf"><p id="eaae" class="pg ph gy bf pi pj pk pl pm pn po nt du">Apps built with Kotlin are 20% less likely to crash.</p></blockquote><p id="64b5" class="pw-post-body-paragraph mw mx gy my b mz pp nb nc nd pq nf ng nh pr nj nk nl ps nn no np pt nr ns nt gn bk">What role does Kotlin play in this? We looked at the top 1,000 apps on Google Play and we saw those that use Kotlin have 20% fewer crashes per user than those that don’t.</p><p id="aec5" class="pw-post-body-paragraph mw mx gy my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">One example of this comes from the engineering team at Swiggy, where 74% of their code is in Kotlin — they saw a <strong class="my gz">50% reduction in crashes</strong> since moving new feature development to Kotlin.</p><h1 id="5114" class="nu nv gy bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Avoiding NullPointerExceptions</h1><p id="b536" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">The #1 cause of crashes on Google Play are <code class="cx pu pv pw px b">NullPointerException</code>s. In 2018, the Google Home team started writing all new features in Kotlin and saw a <a class="af py" href="https://android-developers.googleblog.com/2020/07/Google-home-reduces-crashes.html" rel="noopener ugc nofollow" target="_blank">33% decrease in Null Pointer crashes</a> over one year.</p><blockquote class="pf"><p id="213b" class="pg ph gy bf pi pj pz qa qb qc qd nt du">Google Home saw a 33% decrease in NullPointerExceptions</p></blockquote><p id="195d" class="pw-post-body-paragraph mw mx gy my b mz pp nb nc nd pq nf ng nh pr nj nk nl ps nn no np pt nr ns nt gn bk">To avoid <code class="cx pu pv pw px b">NullPointerException</code>s, you need to make sure that the object references you’re working with are non-null before calling methods on them or trying to access their members. In Kotlin, nullability is part of the type system. For example, a variable needs to be declared from the beginning as nullable or non-nullable. By making nullability part of the type system you don’t have to rely on your memory and knowledge of the codebase, or on compile time warnings (if you annotate your fields / parameters with <code class="cx pu pv pw px b">@Nullable</code>) but rather nullability gets enforced, so you’ll get compile time errors, not just warnings. For ways to handle nullability check out <a class="af py" href="https://developer.android.com/topic/performance/vitals/crash#prevent-crashes-null-pointer" rel="noopener ugc nofollow" target="_blank">this page</a>.</p><h1 id="8096" class="nu nv gy bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Avoiding common issues</h1><p id="d008" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">There are a lot of issues that we developers introduce without realising and a lot of them can be quite subtle and hard to investigate. Here are just a few of these issues that are avoided when using Kotlin.</p><h2 id="060c" class="qe nv gy bf nw qf qg dy oa qh qi ea oe nh qj qk ql nl qm qn qo np qp qq qr qs bk"><code class="cx pu pv pw px b">hashCode()</code> and equals()</h2><p id="641d" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">If two objects are equal, then their hashcode should be the same — but yet, it’s common to forget to implement one of these methods or to update them when new properties are added to the class. When working with classes whose role is to just hold data, use Kotlin <a class="af py" href="https://kotlinlang.org/docs/reference/data-classes.html" rel="noopener ugc nofollow" target="_blank">data classes</a>. With data classes <code class="cx pu pv pw px b"><strong class="my gz">hashCode()</strong></code><strong class="my gz"> and </strong><code class="cx pu pv pw px b"><strong class="my gz">equals()</strong></code><strong class="my gz"> is generated for you by the compiler</strong> and therefore automatically updated when you change the class’s properties.</p><h1 id="ff2b" class="nu nv gy bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Structural vs referential equality</h1><p id="32e3" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">Are two objects structurally equal (have equivalent content) or referentially equal (their pointers are the same)? In the Java programming language, for primitives you would always use <code class="cx pu pv pw px b">==</code>, therefore, a common mistake is to call <code class="cx pu pv pw px b">==</code> (referential equality) for objects as well, when you actually want to check if they are structurally equal (checked by calling <code class="cx pu pv pw px b">equals()</code>). First, <strong class="my gz">Kotlin doesn’t have primitive types</strong>, it uses classes like <code class="cx pu pv pw px b">Int</code> or <code class="cx pu pv pw px b">String</code>; so this means that you don’t need to make this differentiation between objects and primitive types anymore as everything is an object. Second, Kotlin defined <code class="cx pu pv pw px b">==</code> for structural equality and <code class="cx pu pv pw px b">===</code> for referential equality so <strong class="my gz">you won’t be checking for referential equality when you shouldn’t</strong>.</p><h1 id="23a0" class="nu nv gy bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">When if else if else if else is not enough</h1><p id="737d" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">When working with enums, you often need to ensure that you’re covering all the possible cases. This leads to using a <code class="cx pu pv pw px b">switch</code> or a chain of <code class="cx pu pv pw px b">if else</code>s. When you modify your enum to add a new value, you then have to manually check each code snippet where you’re using the enum and make sure you’re handling the new case. But this is error prone. In Kotlin, you can <strong class="my gz">rely on the compiler</strong> for this, if you’re using <code class="cx pu pv pw px b">when</code> as an expression: you’ll get a compiler error if you’re not covering all possible branches.</p><h1 id="4635" class="nu nv gy bf nw nx ny nz oa ob oc od oe of og oh oi oj ok ol om on oo op oq or bk">Conclusion</h1><p id="c958" class="pw-post-body-paragraph mw mx gy my b mz os nb nc nd ot nf ng nh ou nj nk nl ov nn no np ow nr ns nt gn bk">The stability of your app is important for your users and your brand. Start using Kotlin to reduce crash rates, keep your users happy and stay on top of your retention and acquisition by keeping a high app rating.</p><p id="2b04" class="pw-post-body-paragraph mw mx gy my b mz na nb nc nd ne nf ng nh ni nj nk nl nm nn no np nq nr ns nt gn bk">Read more about how you can <a class="af py" href="https://developer.android.com/kotlin/build-better-apps" rel="noopener ugc nofollow" target="_blank">Build Better Apps with Kotlin</a>, and see how developers have benefited from Kotlin by reading our <a class="af py" href="https://developer.android.com/kotlin/stories" rel="noopener ugc nofollow" target="_blank">case studies</a>. To make your first steps with<a class="af py" href="http://d.android.com/kotlin" rel="noopener ugc nofollow" target="_blank"> Kotlin</a>, one of the most <a class="af py" href="https://insights.stackoverflow.com/survey/2020" rel="noopener ugc nofollow" target="_blank">loved languages in the world</a>, check out our <a class="af py" href="https://developer.android.com/kotlin/first" rel="noopener ugc nofollow" target="_blank">Getting started page</a>.</p></div></div></div></div></section></div></div></article></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="qt qu ab je"><div class="qv ab"><a class="qw ay am ao" rel="noopener follow" href="/tag/kotlin?source=post_page-----b606c6a6ac04---------------------------------------"><div class="qx fj cx qy ge qz ra bf b bg z bk rb">Kotlin</div></a></div><div class="qv ab"><a class="qw ay am ao" rel="noopener follow" href="/tag/kotlin-beginners?source=post_page-----b606c6a6ac04---------------------------------------"><div class="qx fj cx qy ge qz ra bf b bg z bk rb">Kotlin Beginners</div></a></div><div class="qv ab"><a class="qw ay am ao" rel="noopener follow" href="/tag/android?source=post_page-----b606c6a6ac04---------------------------------------"><div class="qx fj cx qy ge qz ra bf b bg z bk rb">Android</div></a></div><div class="qv ab"><a class="qw ay am ao" rel="noopener follow" href="/tag/android-app-development?source=post_page-----b606c6a6ac04---------------------------------------"><div class="qx fj cx qy ge qz ra bf b bg z bk rb">Android App Development</div></a></div><div class="qv ab"><a class="qw ay am ao" rel="noopener follow" href="/tag/buildbetterapps?source=post_page-----b606c6a6ac04---------------------------------------"><div class="qx fj cx qy ge qz ra bf b bg z bk rb">Buildbetterapps</div></a></div></div></div></div><div class="l"></div><footer class="rc rd re rf rg ab q rh io c"><div class="l ae"><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab cp ri"><div class="ab q kx"><div class="rj l"><span class="l rk rl rm e d"><div class="ab q kx ky"><div class="pw-multi-vote-icon fj jg kz la lb"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fandroiddevelopers%2Fb606c6a6ac04&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;user=Florina+Muntenescu&amp;userId=d5885adb1ddf&amp;source=---footer_actions--b606c6a6ac04---------------------clap_footer------------------"><div><div class="bm" aria-hidden="false"><div class="lc ao ld le lf lg am lh li lj lb"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l lk ll lm ln lo lp lq"><p class="bf b dv z du"><span class="lr">--</span></p></div></div></span><span class="l h g f rn ro"><div class="ab q kx ky"><div class="pw-multi-vote-icon fj jg kz la lb"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerClapButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fvote%2Fandroiddevelopers%2Fb606c6a6ac04&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;user=Florina+Muntenescu&amp;userId=d5885adb1ddf&amp;source=---footer_actions--b606c6a6ac04---------------------clap_footer------------------"><div><div class="bm" aria-hidden="false"><div class="lc ao ld le lf lg am lh li lj lb"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-label="clap"><path fill-rule="evenodd" d="M11.37.828 12 3.282l.63-2.454zM13.916 3.953l1.523-2.112-1.184-.39zM8.589 1.84l1.522 2.112-.337-2.501zM18.523 18.92c-.86.86-1.75 1.246-2.62 1.33a6 6 0 0 0 .407-.372c2.388-2.389 2.86-4.951 1.399-7.623l-.912-1.603-.79-1.672c-.26-.56-.194-.98.203-1.288a.7.7 0 0 1 .546-.132c.283.046.546.231.728.5l2.363 4.157c.976 1.624 1.141 4.237-1.324 6.702m-10.999-.438L3.37 14.328a.828.828 0 0 1 .585-1.408.83.83 0 0 1 .585.242l2.158 2.157a.365.365 0 0 0 .516-.516l-2.157-2.158-1.449-1.449a.826.826 0 0 1 1.167-1.17l3.438 3.44a.363.363 0 0 0 .516 0 .364.364 0 0 0 0-.516L5.293 9.513l-.97-.97a.826.826 0 0 1 0-1.166.84.84 0 0 1 1.167 0l.97.968 3.437 3.436a.36.36 0 0 0 .517 0 .366.366 0 0 0 0-.516L6.977 7.83a.82.82 0 0 1-.241-.584.82.82 0 0 1 .824-.826c.219 0 .43.087.584.242l5.787 5.787a.366.366 0 0 0 .587-.415l-1.117-2.363c-.26-.56-.194-.98.204-1.289a.7.7 0 0 1 .546-.132c.283.046.545.232.727.501l2.193 3.86c1.302 2.38.883 4.59-1.277 6.75-1.156 1.156-2.602 1.627-4.19 1.367-1.418-.236-2.866-1.033-4.079-2.246M10.75 5.971l2.12 2.12c-.41.502-.465 1.17-.128 1.89l.22.465-3.523-3.523a.8.8 0 0 1-.097-.368c0-.22.086-.428.241-.584a.847.847 0 0 1 1.167 0m7.355 1.705c-.31-.461-.746-.758-1.23-.837a1.44 1.44 0 0 0-1.11.275c-.312.24-.505.543-.59.881a1.74 1.74 0 0 0-.906-.465 1.47 1.47 0 0 0-.82.106l-2.182-2.182a1.56 1.56 0 0 0-2.2 0 1.54 1.54 0 0 0-.396.701 1.56 1.56 0 0 0-2.21-.01 1.55 1.55 0 0 0-.416.753c-.624-.624-1.649-.624-2.237-.037a1.557 1.557 0 0 0 0 2.2c-.239.1-.501.238-.715.453a1.56 1.56 0 0 0 0 2.2l.516.515a1.556 1.556 0 0 0-.753 2.615L7.01 19c1.32 1.319 2.909 2.189 4.475 2.449q.482.08.971.08c.85 0 1.653-.198 2.393-.579.231.033.46.054.686.054 1.266 0 2.457-.52 3.505-1.567 2.763-2.763 2.552-5.734 1.439-7.586z" clip-rule="evenodd"></path></svg></div></div></div></a></span></div><div class="pw-multi-vote-count l lk ll lm ln lo lp lq"><p class="bf b dv z du"><span class="lr">--</span></p></div></div></span></div><div class="bq ab"><div><div class="bm" aria-hidden="false"><button class="ao lc ls lt ab q fk lu lv" aria-label="responses"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="gt"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg></button></div></div></div></div><div class="ab q"><div class="rp l jb"><div><div class="bm" aria-hidden="false"><span><a class="af ag ah ai aj ak al am an ao ap aq ar as at" data-testid="footerBookmarkButton" rel="noopener follow" href="/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fb606c6a6ac04&amp;operation=register&amp;redirect=https%3A%2F%2Fmedium.com%2Fandroiddevelopers%2Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04&amp;source=---footer_actions--b606c6a6ac04---------------------bookmark_footer------------------"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="none" viewBox="0 0 25 25" class="du lx" aria-label="Add to list bookmark button"><path fill="currentColor" d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z"></path></svg></a></span></div></div></div><div class="rp l jb"><div class="bm" aria-hidden="false" aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu"><div><div class="bm" aria-hidden="false"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" data-testid="footerSocialShareButton" class="af fk ah ai aj ak al me an ao ap ex mf mg lv mh"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24"><path fill="currentColor" fill-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" clip-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></footer><div class="rq l"><div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="rr l"><div class="ab rs rt ru jd jc"><div class="rv rw rx ry rz sa sb sc sd se ab cp"><div class="h k"><a href="https://medium.com/androiddevelopers?source=post_page---post_publication_info--b606c6a6ac04---------------------------------------" rel="noopener follow"><div class="fj ab"><img alt="Android Developers" class="sf if ig cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*4Tg6pPzer7cIarYaszIKaQ.png" width="48" height="48" loading="lazy"/><div class="sf l ig if fs n fr sg"></div></div></a></div><div class="j i d"><a href="https://medium.com/androiddevelopers?source=post_page---post_publication_info--b606c6a6ac04---------------------------------------" rel="noopener follow"><div class="fj ab"><img alt="Android Developers" class="sf si sh cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*4Tg6pPzer7cIarYaszIKaQ.png" width="64" height="64" loading="lazy"/><div class="sf l sh si fs n fr sg"></div></div></a></div><div class="j i d sj jb"><div class="ab"></div></div></div><div class="ab co sk"><div class="sl sm sn so sp l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" href="https://medium.com/androiddevelopers?source=post_page---post_publication_info--b606c6a6ac04---------------------------------------" rel="noopener follow"><h2 class="pw-author-name bf sr ss st su sv sw sx nh qk ql nl qn qo np qq qr bk"><span class="gn sq">Published in <!-- -->Android Developers</span></h2></a><div class="qv ab ie"><div class="l jb"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar iu" rel="noopener follow" href="/androiddevelopers/followers?source=post_page---post_publication_info--b606c6a6ac04---------------------------------------">53K Followers</a></span></div><div class="bf b bg z du ab jf"><span class="iv l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar iu" rel="noopener follow" href="/androiddevelopers/now-in-android-113-d6617517df62?source=post_page---post_publication_info--b606c6a6ac04---------------------------------------">Last published <span>Jan 23, 2025</span></a></div></div><div class="sy l"><p class="bf b bg z bk"><span class="gn">Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device.</span></p></div></div></div><div class="h k"><div class="ab"></div></div></div></div><div class="ab rs rt ru jd jc"><div class="rv rw rx ry rz sa sb sc sd se ab cp"><div class="h k"><a tabindex="0" rel="noopener follow" href="/@florina.muntenescu?source=post_page---post_author_info--b606c6a6ac04---------------------------------------"><div class="l fj"><img alt="Florina Muntenescu" class="l fd by ig if cx" src="https://miro.medium.com/v2/resize:fill:96:96/1*z2H2HkOuv5bAOuIvUUN-5w.jpeg" width="48" height="48" loading="lazy"/><div class="fr by l ig if fs n ay sg"></div></div></a></div><div class="j i d"><a tabindex="0" rel="noopener follow" href="/@florina.muntenescu?source=post_page---post_author_info--b606c6a6ac04---------------------------------------"><div class="l fj"><img alt="Florina Muntenescu" class="l fd by sh si cx" src="https://miro.medium.com/v2/resize:fill:128:128/1*z2H2HkOuv5bAOuIvUUN-5w.jpeg" width="64" height="64" loading="lazy"/><div class="fr by l sh si fs n ay sg"></div></div></a></div><div class="j i d sj jb"><div class="ab"><span><button class="bf b bg z sz qx ta tb tc td te ev ew tf tg th fa fb fc fd bm fe ff">Follow</button></span></div></div></div><div class="ab co sk"><div class="sl sm sn so sp l"><a class="af ag ah aj ak al am an ao ap aq ar as at ab q" rel="noopener follow" href="/@florina.muntenescu?source=post_page---post_author_info--b606c6a6ac04---------------------------------------"><h2 class="pw-author-name bf sr ss st su sv sw sx nh qk ql nl qn qo np qq qr bk"><span class="gn sq">Written by <!-- -->Florina Muntenescu</span></h2></a><div class="qv ab ie"><div class="l jb"><span class="pw-follower-count bf b bg z du"><a class="af ag ah ai aj ak al am an ao ap aq ar iu" rel="noopener follow" href="/@florina.muntenescu/followers?source=post_page---post_author_info--b606c6a6ac04---------------------------------------">21K Followers</a></span></div><div class="bf b bg z du ab jf"><span class="iv l" aria-hidden="true"><span class="bf b bg z du">·</span></span><a class="af ag ah ai aj ak al am an ao ap aq ar iu" rel="noopener follow" href="/@florina.muntenescu/following?source=post_page---post_author_info--b606c6a6ac04---------------------------------------">158 Following</a></div></div><div class="sy l"><p class="bf b bg z bk"><span class="gn">Android Developer Advocate @Google</span></p></div></div></div><div class="h k"><div class="ab"><span><button class="bf b bg z sz qx ta tb tc td te ev ew tf tg th fa fb fc fd bm fe ff">Follow</button></span></div></div></div></div></div></div></div><div class="ti l"><div class="tj bh r rq"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="ab q cp"><h2 class="bf sr nx nz oa ob od oe of oh oi oj ol om on op oq bk">No responses yet</h2><div class="ab tk"><div><div class="bm" aria-hidden="false"><a class="tl tm" href="https://policy.medium.com/medium-rules-30e5502c4eb4?source=post_page---post_responses--b606c6a6ac04---------------------------------------" rel="noopener follow" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 25 25"><path fill-rule="evenodd" d="M11.987 5.036a.754.754 0 0 1 .914-.01c.972.721 1.767 1.218 2.6 1.543.828.322 1.719.485 2.887.505a.755.755 0 0 1 .741.757c-.018 3.623-.43 6.256-1.449 8.21-1.034 1.984-2.662 3.209-4.966 4.083a.75.75 0 0 1-.537-.003c-2.243-.874-3.858-2.095-4.897-4.074-1.024-1.951-1.457-4.583-1.476-8.216a.755.755 0 0 1 .741-.757c1.195-.02 2.1-.182 2.923-.503.827-.322 1.6-.815 2.519-1.535m.468.903c-.897.69-1.717 1.21-2.623 1.564-.898.35-1.856.527-3.026.565.037 3.45.469 5.817 1.36 7.515.884 1.684 2.25 2.762 4.284 3.571 2.092-.81 3.465-1.89 4.344-3.575.886-1.698 1.299-4.065 1.334-7.512-1.149-.039-2.091-.217-2.99-.567-.906-.353-1.745-.873-2.683-1.561m-.009 9.155a2.672 2.672 0 1 0 0-5.344 2.672 2.672 0 0 0 0 5.344m0 1a3.672 3.672 0 1 0 0-7.344 3.672 3.672 0 0 0 0 7.344m-1.813-3.777.525-.526.916.917 1.623-1.625.526.526-2.149 2.152z" clip-rule="evenodd"></path></svg></a></div></div></div></div><div class="tn to tp tq tr l"></div></div></div></div><div class="ts tt tu tv tw l bx"><div class="h k j"><div class="tj bh tx ty"></div><div class="ab cb"><div class="ci bh fz ga gb gc"><div class="tz ab kx je"><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://help.medium.com/hc/en-us?source=post_page-----b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b dv z du">Help</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://medium.statuspage.io/?source=post_page-----b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b dv z du">Status</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/about?autoplay=1&amp;source=post_page-----b606c6a6ac04---------------------------------------"><p class="bf b dv z du">About</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/jobs-at-medium/work-at-medium-959d1a85284e?source=post_page-----b606c6a6ac04---------------------------------------"><p class="bf b dv z du">Careers</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="mailto:pressinquiries@medium.com" rel="noopener follow"><p class="bf b dv z du">Press</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://blog.medium.com/?source=post_page-----b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b dv z du">Blog</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9?source=post_page-----b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b dv z du">Privacy</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f?source=post_page-----b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b dv z du">Terms</p></a></div><div class="ua ub l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" href="https://speechify.com/medium?source=post_page-----b606c6a6ac04---------------------------------------" rel="noopener follow"><p class="bf b dv z du">Text to speech</p></a></div><div class="ua l"><a class="af ag ah ai aj ak al am an ao ap aq ar as at" rel="noopener follow" href="/business?source=post_page-----b606c6a6ac04---------------------------------------"><p class="bf b dv z du">Teams</p></a></div></div></div></div></div></div></div></div></div></div><script>window.__BUILD_ID__="main-20250214-225023-b6ac233ec4"</script><script>window.__GRAPHQL_URI__ = "https://medium.com/_/graphql"</script><script>window.__PRELOADED_STATE__ = {"algolia":{"queries":{}},"cache":{"experimentGroupSet":true,"reason":"","group":"enabled","tags":["group-edgeCachePosts","post-b606c6a6ac04","user-d5885adb1ddf","collection-95b274b437c2"],"serverVariantState":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","middlewareEnabled":true,"cacheStatus":"DYNAMIC","shouldUseCache":true,"vary":[],"pubFeaturingPostPageLabelEnabled":false},"client":{"hydrated":false,"isUs":false,"isNativeMedium":false,"isSafariMobile":false,"isSafari":false,"isFirefox":false,"routingEntity":{"type":"DEFAULT","explicit":false},"viewerIsBot":false},"debug":{"requestId":"de0bbf44-0561-4f90-beed-efb03a741330","requestTag":"","hybridDevServices":[],"originalSpanCarrier":{"traceparent":"00-10fed3879bf1399ccecea05a6d18f515-0c4ea836367e681f-01"}},"multiVote":{"clapsPerPost":{}},"navigation":{"branch":{"show":null,"hasRendered":null,"blockedByCTA":false},"hideGoogleOneTap":false,"hasRenderedAlternateUserBanner":null,"currentLocation":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04","host":"medium.com","hostname":"medium.com","referrer":"","hasSetReferrer":false,"susiModal":{"step":null,"operation":"register"},"postRead":false,"partnerProgram":{"selectedCountryCode":null},"queryString":"","currentHash":""},"config":{"nodeEnv":"production","version":"main-20250214-225023-b6ac233ec4","target":"production","productName":"Medium","publicUrl":"https:\u002F\u002Fcdn-client.medium.com\u002Flite","authDomain":"medium.com","authGoogleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","favicon":"production","glyphUrl":"https:\u002F\u002Fglyph.medium.com","branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","algolia":{"appId":"MQ57UUUQZ2","apiKeySearch":"394474ced050e3911ae2249ecc774921","indexPrefix":"medium_","host":"-dsn.algolia.net"},"recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","recaptchaEnterpriseKeyId":"6Le-uGgpAAAAAPprRaokM8AKthQ9KNGdoxaGUvVp","datadog":{"applicationId":"6702d87d-a7e0-42fe-bbcb-95b469547ea0","clientToken":"pub853ea8d17ad6821d9f8f11861d23dfed","rumToken":"pubf9cc52896502b9413b68ba36fc0c7162","context":{"deployment":{"target":"production","tag":"main-20250214-225023-b6ac233ec4","commit":"b6ac233ec4e33c48e304b373b7df8c338a410ef2"}},"datacenter":"us"},"googleAnalyticsCode":"G-7JY7T788PK","googlePay":{"apiVersion":"2","apiVersionMinor":"0","merchantId":"BCR2DN6TV7EMTGBM","merchantName":"Medium","instanceMerchantId":"13685562959212738550"},"applePay":{"version":3},"signInWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"mediumMastodonDomainName":"me.dm","mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"],"tierOneDomains":["medium.com","thebolditalic.com","arcdigital.media","towardsdatascience.com","uxdesign.cc","codeburst.io","psiloveyou.xyz","writingcooperative.com","entrepreneurshandbook.co","prototypr.io","betterhumans.coach.me","theascent.pub"],"topicsToFollow":["d61cf867d93f","8a146bc21b28","1eca0103fff3","4d562ee63426","aef1078a3ef5","e15e46793f8d","6158eb913466","55f1c20aba7a","3d18b94f6858","4861fee224fd","63c6f1f93ee","1d98b3a9a871","decb52b64abf","ae5d4995e225","830cded25262"],"topicToTagMappings":{"accessibility":"accessibility","addiction":"addiction","android-development":"android-development","art":"art","artificial-intelligence":"artificial-intelligence","astrology":"astrology","basic-income":"basic-income","beauty":"beauty","biotech":"biotech","blockchain":"blockchain","books":"books","business":"business","cannabis":"cannabis","cities":"cities","climate-change":"climate-change","comics":"comics","coronavirus":"coronavirus","creativity":"creativity","cryptocurrency":"cryptocurrency","culture":"culture","cybersecurity":"cybersecurity","data-science":"data-science","design":"design","digital-life":"digital-life","disability":"disability","economy":"economy","education":"education","equality":"equality","family":"family","feminism":"feminism","fiction":"fiction","film":"film","fitness":"fitness","food":"food","freelancing":"freelancing","future":"future","gadgets":"gadgets","gaming":"gaming","gun-control":"gun-control","health":"health","history":"history","humor":"humor","immigration":"immigration","ios-development":"ios-development","javascript":"javascript","justice":"justice","language":"language","leadership":"leadership","lgbtqia":"lgbtqia","lifestyle":"lifestyle","machine-learning":"machine-learning","makers":"makers","marketing":"marketing","math":"math","media":"media","mental-health":"mental-health","mindfulness":"mindfulness","money":"money","music":"music","neuroscience":"neuroscience","nonfiction":"nonfiction","outdoors":"outdoors","parenting":"parenting","pets":"pets","philosophy":"philosophy","photography":"photography","podcasts":"podcast","poetry":"poetry","politics":"politics","privacy":"privacy","product-management":"product-management","productivity":"productivity","programming":"programming","psychedelics":"psychedelics","psychology":"psychology","race":"race","relationships":"relationships","religion":"religion","remote-work":"remote-work","san-francisco":"san-francisco","science":"science","self":"self","self-driving-cars":"self-driving-cars","sexuality":"sexuality","social-media":"social-media","society":"society","software-engineering":"software-engineering","space":"space","spirituality":"spirituality","sports":"sports","startups":"startup","style":"style","technology":"technology","transportation":"transportation","travel":"travel","true-crime":"true-crime","tv":"tv","ux":"ux","venture-capital":"venture-capital","visual-design":"visual-design","work":"work","world":"world","writing":"writing"},"defaultImages":{"avatar":{"imageId":"1*dmbNkD5D-u45r44go_cf0g.png","height":150,"width":150},"orgLogo":{"imageId":"7*V1_7XP4snlmqrc_0Njontw.png","height":110,"width":500},"postLogo":{"imageId":"bd978bb536350a710e8efb012513429cabdc4c28700604261aeda246d0f980b7","height":810,"width":1440},"postPreviewImage":{"imageId":"1*hn4v1tCaJy7cWMyb0bpNpQ.png","height":386,"width":579}},"collectionStructuredData":{"8d6b8a439e32":{"name":"Elemental","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F980\u002F1*9ygdqoKprhwuTVKUM0DLPA@2x.png","width":980,"height":159}}},"3f6ecf56618":{"name":"Forge","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F596\u002F1*uULpIlImcO5TDuBZ6lm7Lg@2x.png","width":596,"height":183}}},"ae2a65f35510":{"name":"GEN","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F264\u002F1*RdVZMdvfV3YiZTw6mX7yWA.png","width":264,"height":140}}},"88d9857e584e":{"name":"LEVEL","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*JqYMhNX6KNNb2UlqGqO2WQ.png","width":540,"height":108}}},"7b6769f2748b":{"name":"Marker","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fcdn-images-1.medium.com\u002Fmax\u002F383\u002F1*haCUs0wF6TgOOvfoY-jEoQ@2x.png","width":383,"height":92}}},"444d13b52878":{"name":"OneZero","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*cw32fIqCbRWzwJaoQw6BUg.png","width":540,"height":123}}},"8ccfed20cbb2":{"name":"Zora","data":{"@type":"NewsMediaOrganization","ethicsPolicy":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Farticles\u002F360043290473","logo":{"@type":"ImageObject","url":"https:\u002F\u002Fmiro.medium.com\u002Fmax\u002F540\u002F1*tZUQqRcCCZDXjjiZ4bDvgQ.png","width":540,"height":106}}}},"embeddedPostIds":{"coronavirus":"cd3010f9d81f"},"sharedCdcMessaging":{"COVID_APPLICABLE_TAG_SLUGS":[],"COVID_APPLICABLE_TOPIC_NAMES":[],"COVID_APPLICABLE_TOPIC_NAMES_FOR_TOPIC_PAGE":[],"COVID_MESSAGES":{"tierA":{"text":"For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":66,"end":73,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"tierB":{"text":"Anyone can publish on Medium per our Policies, but we don’t fact-check every story. For more info about the coronavirus, see cdc.gov.","markups":[{"start":37,"end":45,"href":"https:\u002F\u002Fhelp.medium.com\u002Fhc\u002Fen-us\u002Fcategories\u002F201931128-Policies-Safety"},{"start":125,"end":132,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"paywall":{"text":"This article has been made free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":56,"end":70,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":138,"end":145,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]},"unbound":{"text":"This article is free for everyone, thanks to Medium Members. For more information on the novel coronavirus and Covid-19, visit cdc.gov.","markups":[{"start":45,"end":59,"href":"https:\u002F\u002Fmedium.com\u002Fmembership"},{"start":127,"end":134,"href":"https:\u002F\u002Fwww.cdc.gov\u002Fcoronavirus\u002F2019-nCoV"}]}},"COVID_BANNER_POST_ID_OVERRIDE_WHITELIST":["3b31a67bff4a"]},"sharedVoteMessaging":{"TAGS":["politics","election-2020","government","us-politics","election","2020-presidential-race","trump","donald-trump","democrats","republicans","congress","republican-party","democratic-party","biden","joe-biden","maga"],"TOPICS":["politics","election"],"MESSAGE":{"text":"Find out more about the U.S. election results here.","markups":[{"start":46,"end":50,"href":"https:\u002F\u002Fcookpolitical.com\u002F2020-national-popular-vote-tracker"}]},"EXCLUDE_POSTS":["397ef29e3ca5"]},"embedPostRules":[],"recircOptions":{"v1":{"limit":3},"v2":{"limit":8}},"braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","braintree":{"enabled":true,"merchantId":"m56f8fqpf7ngnrd4","merchantAccountId":{"usd":"AMediumCorporation_instant","eur":"amediumcorporation_EUR","cad":"amediumcorporation_CAD"},"publicKey":"ds2nn34bg2z7j5gd","braintreeEnvironment":"production","dashboardUrl":"https:\u002F\u002Fwww.braintreegateway.com\u002Fmerchants","gracePeriodDurationInDays":14,"mediumMembershipPlanId":{"monthly":"ce105f8c57a3","monthlyV2":"e8a5e126-792b-4ee6-8fba-d574c1b02fc5","monthlyWithTrial":"d5ee3dbe3db8","monthlyPremium":"fa741a9b47a2","yearly":"a40ad4a43185","yearlyV2":"3815d7d6-b8ca-4224-9b8c-182f9047866e","yearlyStaff":"d74fb811198a","yearlyWithTrial":"b3bc7350e5c7","yearlyPremium":"e21bd2c12166","monthlyOneYearFree":"e6c0637a-2bad-4171-ab4f-3c268633d83c","monthly25PercentOffFirstYear":"235ecc62-0cdb-49ae-9378-726cd21c504b","monthly20PercentOffFirstYear":"ba518864-9c13-4a99-91ca-411bf0cac756","monthly15PercentOffFirstYear":"594c029b-9f89-43d5-88f8-8173af4e070e","monthly10PercentOffFirstYear":"c6c7bc9a-40f2-4b51-8126-e28511d5bdb0","monthlyForStudents":"629ebe51-da7d-41fd-8293-34cd2f2030a8","yearlyOneYearFree":"78ba7be9-0d9f-4ece-aa3e-b54b826f2bf1","yearly25PercentOffFirstYear":"2dbb010d-bb8f-4eeb-ad5c-a08509f42d34","yearly20PercentOffFirstYear":"47565488-435b-47f8-bf93-40d5fbe0ebc8","yearly15PercentOffFirstYear":"8259809b-0881-47d9-acf7-6c001c7f720f","yearly10PercentOffFirstYear":"9dd694fb-96e1-472c-8d9e-3c868d5c1506","yearlyForStudents":"e29345ef-ab1c-4234-95c5-70e50fe6bc23","monthlyCad":"p52orjkaceei","yearlyCad":"h4q9g2up9ktt"},"braintreeDiscountId":{"oneMonthFree":"MONTHS_FREE_01","threeMonthsFree":"MONTHS_FREE_03","sixMonthsFree":"MONTHS_FREE_06","fiftyPercentOffOneYear":"FIFTY_PERCENT_OFF_ONE_YEAR"},"3DSecureVersion":"2","defaultCurrency":"usd","providerPlanIdCurrency":{"4ycw":"usd","rz3b":"usd","3kqm":"usd","jzw6":"usd","c2q2":"usd","nnsw":"usd","q8qw":"usd","d9y6":"usd","fx7w":"cad","nwf2":"cad"}},"paypalClientId":"AXj1G4fotC2GE8KzWX9mSxCH1wmPE3nJglf4Z2ig_amnhvlMVX87otaq58niAg9iuLktVNF_1WCMnN7v","paypal":{"host":"https:\u002F\u002Fapi.paypal.com:443","clientMode":"production","serverMode":"live","webhookId":"4G466076A0294510S","monthlyPlan":{"planId":"P-9WR0658853113943TMU5FDQA","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlan":{"planId":"P-7N8963881P8875835MU5JOPQ","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com\u002Fredeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"},"oldMonthlyPlan":{"planId":"P-96U02458LM656772MJZUVH2Y","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlan":{"planId":"P-59P80963JF186412JJZU3SMI","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"monthlyPlanWithTrial":{"planId":"P-66C21969LR178604GJPVKUKY","name":"Medium Membership (Monthly) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"yearlyPlanWithTrial":{"planId":"P-6XW32684EX226940VKCT2MFA","name":"Medium Membership (Annual) with setup fee","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"oldMonthlyPlanNoSetupFee":{"planId":"P-4N046520HR188054PCJC7LJI","name":"Medium Membership (Monthly)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed monthly."},"oldYearlyPlanNoSetupFee":{"planId":"P-7A4913502Y5181304CJEJMXQ","name":"Medium Membership (Annual)","description":"Unlimited access to the best and brightest stories on Medium. Membership billed annually."},"sdkUrl":"https:\u002F\u002Fwww.paypal.com\u002Fsdk\u002Fjs"},"stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","log":{"json":true,"level":"info"},"imageUploadMaxSizeMb":25,"staffPicks":{"title":"Staff Picks","catalogId":"c7bc6e1ee00f"}},"session":{"xsrf":""}}</script><script>window.__APOLLO_STATE__ = {"ROOT_QUERY":{"__typename":"Query","viewer":null,"collectionByDomainOrSlug({\"domainOrSlug\":\"androiddevelopers\"})":{"__ref":"Collection:95b274b437c2"},"postResult({\"id\":\"b606c6a6ac04\"})":{"__ref":"Post:b606c6a6ac04"}},"ImageMetadata:":{"__typename":"ImageMetadata","id":""},"Collection:95b274b437c2":{"__typename":"Collection","id":"95b274b437c2","favicon":{"__ref":"ImageMetadata:"},"customStyleSheet":null,"colorPalette":{"__typename":"ColorPalette","highlightSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FFF4F2F3","point":0},{"__typename":"ColorPoint","color":"#FFF2F0F1","point":0.1},{"__typename":"ColorPoint","color":"#FFF0EEEF","point":0.2},{"__typename":"ColorPoint","color":"#FFEEECEE","point":0.3},{"__typename":"ColorPoint","color":"#FFECEAEC","point":0.4},{"__typename":"ColorPoint","color":"#FFEAE8EA","point":0.5},{"__typename":"ColorPoint","color":"#FFE8E7E9","point":0.6},{"__typename":"ColorPoint","color":"#FFE6E5E7","point":0.7},{"__typename":"ColorPoint","color":"#FFE4E3E5","point":0.8},{"__typename":"ColorPoint","color":"#FFE2E1E4","point":0.9},{"__typename":"ColorPoint","color":"#FFE0DFE2","point":1}]},"defaultBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FFFFFFFF","colorPoints":[{"__typename":"ColorPoint","color":"#FF848488","point":0},{"__typename":"ColorPoint","color":"#FF7B7B7E","point":0.1},{"__typename":"ColorPoint","color":"#FF717275","point":0.2},{"__typename":"ColorPoint","color":"#FF68686B","point":0.3},{"__typename":"ColorPoint","color":"#FF5E5E60","point":0.4},{"__typename":"ColorPoint","color":"#FF545456","point":0.5},{"__typename":"ColorPoint","color":"#FF4A494B","point":0.6},{"__typename":"ColorPoint","color":"#FF3F3E40","point":0.7},{"__typename":"ColorPoint","color":"#FF333334","point":0.8},{"__typename":"ColorPoint","color":"#FF272728","point":0.9},{"__typename":"ColorPoint","color":"#FF1A1A1A","point":1}]},"tintBackgroundSpectrum":{"__typename":"ColorSpectrum","backgroundColor":"#FF202124","colorPoints":[{"__typename":"ColorPoint","color":"#FF202124","point":0},{"__typename":"ColorPoint","color":"#FF3D3E41","point":0.1},{"__typename":"ColorPoint","color":"#FF58585B","point":0.2},{"__typename":"ColorPoint","color":"#FF707073","point":0.3},{"__typename":"ColorPoint","color":"#FF878689","point":0.4},{"__typename":"ColorPoint","color":"#FF9D9C9E","point":0.5},{"__typename":"ColorPoint","color":"#FFB2B1B2","point":0.6},{"__typename":"ColorPoint","color":"#FFC6C5C6","point":0.7},{"__typename":"ColorPoint","color":"#FFDAD8DA","point":0.8},{"__typename":"ColorPoint","color":"#FFEEEBEC","point":0.9},{"__typename":"ColorPoint","color":"#FFFFFEFF","point":1}]}},"domain":null,"slug":"androiddevelopers","googleAnalyticsId":null,"name":"Android Developers","avatar":{"__ref":"ImageMetadata:1*4Tg6pPzer7cIarYaszIKaQ.png"},"description":"Articles on modern tools and resources to help you build experiences that people love, faster and easier, across every Android device.","subscriberCount":53895,"latestPostsConnection({\"paging\":{\"limit\":1}})":{"__typename":"PostConnection","posts":[{"__ref":"Post:d6617517df62"}]},"isAuroraVisible":false,"tintColor":"#FF202124","newsletterV3":null,"viewerEdge":{"__ref":"CollectionViewerEdge:collectionId:95b274b437c2-viewerId:lo_512b231b7e37"},"twitterUsername":"androiddev","facebookPageId":null,"logo":{"__ref":"ImageMetadata:1*5pMw_nx55x_66tk77kutPQ.png"}},"ImageMetadata:1*4Tg6pPzer7cIarYaszIKaQ.png":{"__typename":"ImageMetadata","id":"1*4Tg6pPzer7cIarYaszIKaQ.png"},"User:06594c43b26a":{"__typename":"User","id":"06594c43b26a","customDomainState":null,"hasSubdomain":false,"username":"trambui09"},"Post:d6617517df62":{"__typename":"Post","id":"d6617517df62","firstPublishedAt":1737675843592,"creator":{"__ref":"User:06594c43b26a"},"collection":{"__ref":"Collection:95b274b437c2"},"isSeries":false,"mediumUrl":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002Fnow-in-android-113-d6617517df62","sequence":null,"uniqueSlug":"now-in-android-113-d6617517df62"},"LinkedAccounts:d5885adb1ddf":{"__typename":"LinkedAccounts","mastodon":null,"id":"d5885adb1ddf"},"User:d5885adb1ddf":{"__typename":"User","id":"d5885adb1ddf","linkedAccounts":{"__ref":"LinkedAccounts:d5885adb1ddf"},"isSuspended":false,"name":"Florina Muntenescu","imageId":"1*z2H2HkOuv5bAOuIvUUN-5w.jpeg","customDomainState":null,"hasSubdomain":false,"username":"florina.muntenescu","verifications":{"__typename":"VerifiedInfo","isBookAuthor":false},"socialStats":{"__typename":"SocialStats","followerCount":21061,"followingCount":148,"collectionFollowingCount":10},"bio":"Android Developer Advocate @Google","membership":null,"allowNotes":true,"viewerEdge":{"__ref":"UserViewerEdge:userId:d5885adb1ddf-viewerId:lo_512b231b7e37"},"twitterScreenName":""},"Topic:64756708407c":{"__typename":"Topic","slug":"android-development","id":"64756708407c","name":"Android Dev"},"ImageMetadata:1*xpV09u6FyIP96us3K7nDIg.jpeg":{"__typename":"ImageMetadata","id":"1*xpV09u6FyIP96us3K7nDIg.jpeg","originalHeight":2611,"originalWidth":8770,"focusPercentX":null,"focusPercentY":null,"alt":null},"Paragraph:bbd7e798da78_0":{"__typename":"Paragraph","id":"bbd7e798da78_0","name":"88f1","type":"IMG","href":null,"layout":"FULL_WIDTH","metadata":{"__ref":"ImageMetadata:1*xpV09u6FyIP96us3K7nDIg.jpeg"},"text":"","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_1":{"__typename":"Paragraph","id":"bbd7e798da78_1","name":"50da","type":"H3","href":null,"layout":null,"metadata":null,"text":"Fewer crashes and more stability with Kotlin","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_2":{"__typename":"Paragraph","id":"bbd7e798da78_2","name":"10bb","type":"P","href":null,"layout":null,"metadata":null,"text":"Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging your brand perception. From talking to the community we know that one of the main reasons to adopt Kotlin is safer code. In this post I’ll share a couple of the ways Kotlin improved the stability of a few of our partners’ code but we’ll also look at the results of some Google Play store stats and see if there’s a correlation between using Kotlin and the number of crashes (spoilers: there is!).","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_3":{"__typename":"Paragraph","id":"bbd7e798da78_3","name":"d7b5","type":"H3","href":null,"layout":null,"metadata":null,"text":"App quality","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_4":{"__typename":"Paragraph","id":"bbd7e798da78_4","name":"9b6a","type":"P","href":null,"layout":null,"metadata":null,"text":"The quality of your app doesn’t only have an impact on your user experience. There are several other elements that will be affected by a high number of crashes:","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_5":{"__typename":"Paragraph","id":"bbd7e798da78_5","name":"1730","type":"ULI","href":null,"layout":null,"metadata":null,"text":"App discoverability — Google Play store’s recommendations are composed of a mix of human curation and algorithmic calculations, of which quality is one of the largest considerations.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":19,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_6":{"__typename":"Paragraph","id":"bbd7e798da78_6","name":"28fd","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Brand — Your product performance can impact your ratings and reviews, which can impact brand perception.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":5,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_7":{"__typename":"Paragraph","id":"bbd7e798da78_7","name":"fb95","type":"ULI","href":null,"layout":null,"metadata":null,"text":"Higher number of (engaged) users — Having improved organic traffic and brand perception can lead to better user acquisition and retention, which can also impact engagement and lower funnel metrics.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":0,"end":32,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_8":{"__typename":"Paragraph","id":"bbd7e798da78_8","name":"eaae","type":"PQ","href":null,"layout":null,"metadata":null,"text":"Apps built with Kotlin are 20% less likely to crash.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_9":{"__typename":"Paragraph","id":"bbd7e798da78_9","name":"64b5","type":"P","href":null,"layout":null,"metadata":null,"text":"What role does Kotlin play in this? We looked at the top 1,000 apps on Google Play and we saw those that use Kotlin have 20% fewer crashes per user than those that don’t.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_10":{"__typename":"Paragraph","id":"bbd7e798da78_10","name":"aec5","type":"P","href":null,"layout":null,"metadata":null,"text":"One example of this comes from the engineering team at Swiggy, where 74% of their code is in Kotlin — they saw a 50% reduction in crashes since moving new feature development to Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"STRONG","start":113,"end":137,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_11":{"__typename":"Paragraph","id":"bbd7e798da78_11","name":"5114","type":"H3","href":null,"layout":null,"metadata":null,"text":"Avoiding NullPointerExceptions","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_12":{"__typename":"Paragraph","id":"bbd7e798da78_12","name":"b536","type":"P","href":null,"layout":null,"metadata":null,"text":"The #1 cause of crashes on Google Play are NullPointerExceptions. In 2018, the Google Home team started writing all new features in Kotlin and saw a 33% decrease in Null Pointer crashes over one year.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":43,"end":63,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":149,"end":185,"href":"https:\u002F\u002Fandroid-developers.googleblog.com\u002F2020\u002F07\u002FGoogle-home-reduces-crashes.html","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_13":{"__typename":"Paragraph","id":"bbd7e798da78_13","name":"213b","type":"PQ","href":null,"layout":null,"metadata":null,"text":"Google Home saw a 33% decrease in NullPointerExceptions","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_14":{"__typename":"Paragraph","id":"bbd7e798da78_14","name":"195d","type":"P","href":null,"layout":null,"metadata":null,"text":"To avoid NullPointerExceptions, you need to make sure that the object references you’re working with are non-null before calling methods on them or trying to access their members. In Kotlin, nullability is part of the type system. For example, a variable needs to be declared from the beginning as nullable or non-nullable. By making nullability part of the type system you don’t have to rely on your memory and knowledge of the codebase, or on compile time warnings (if you annotate your fields \u002F parameters with @Nullable) but rather nullability gets enforced, so you’ll get compile time errors, not just warnings. For ways to handle nullability check out this page.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":9,"end":29,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":514,"end":523,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":658,"end":667,"href":"https:\u002F\u002Fdeveloper.android.com\u002Ftopic\u002Fperformance\u002Fvitals\u002Fcrash#prevent-crashes-null-pointer","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_15":{"__typename":"Paragraph","id":"bbd7e798da78_15","name":"8096","type":"H3","href":null,"layout":null,"metadata":null,"text":"Avoiding common issues","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_16":{"__typename":"Paragraph","id":"bbd7e798da78_16","name":"d008","type":"P","href":null,"layout":null,"metadata":null,"text":"There are a lot of issues that we developers introduce without realising and a lot of them can be quite subtle and hard to investigate. Here are just a few of these issues that are avoided when using Kotlin.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_17":{"__typename":"Paragraph","id":"bbd7e798da78_17","name":"060c","type":"H4","href":null,"layout":null,"metadata":null,"text":"hashCode() and equals()","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":0,"end":10,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_18":{"__typename":"Paragraph","id":"bbd7e798da78_18","name":"641d","type":"P","href":null,"layout":null,"metadata":null,"text":"If two objects are equal, then their hashcode should be the same — but yet, it’s common to forget to implement one of these methods or to update them when new properties are added to the class. When working with classes whose role is to just hold data, use Kotlin data classes. With data classes hashCode() and equals() is generated for you by the compiler and therefore automatically updated when you change the class’s properties.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":296,"end":306,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":311,"end":319,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":264,"end":276,"href":"https:\u002F\u002Fkotlinlang.org\u002Fdocs\u002Freference\u002Fdata-classes.html","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":296,"end":356,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_19":{"__typename":"Paragraph","id":"bbd7e798da78_19","name":"ff2b","type":"H3","href":null,"layout":null,"metadata":null,"text":"Structural vs referential equality","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_20":{"__typename":"Paragraph","id":"bbd7e798da78_20","name":"32e3","type":"P","href":null,"layout":null,"metadata":null,"text":"Are two objects structurally equal (have equivalent content) or referentially equal (their pointers are the same)? In the Java programming language, for primitives you would always use ==, therefore, a common mistake is to call == (referential equality) for objects as well, when you actually want to check if they are structurally equal (checked by calling equals()). First, Kotlin doesn’t have primitive types, it uses classes like Int or String; so this means that you don’t need to make this differentiation between objects and primitive types anymore as everything is an object. Second, Kotlin defined == for structural equality and === for referential equality so you won’t be checking for referential equality when you shouldn’t.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":185,"end":187,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":228,"end":230,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":358,"end":366,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":434,"end":437,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":441,"end":447,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":607,"end":609,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":638,"end":641,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":376,"end":411,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":670,"end":735,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_21":{"__typename":"Paragraph","id":"bbd7e798da78_21","name":"23a0","type":"H3","href":null,"layout":null,"metadata":null,"text":"When if else if else if else is not enough","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_22":{"__typename":"Paragraph","id":"bbd7e798da78_22","name":"737d","type":"P","href":null,"layout":null,"metadata":null,"text":"When working with enums, you often need to ensure that you’re covering all the possible cases. This leads to using a switch or a chain of if elses. When you modify your enum to add a new value, you then have to manually check each code snippet where you’re using the enum and make sure you’re handling the new case. But this is error prone. In Kotlin, you can rely on the compiler for this, if you’re using when as an expression: you’ll get a compiler error if you’re not covering all possible branches.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"CODE","start":117,"end":123,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":138,"end":145,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"CODE","start":407,"end":411,"href":null,"anchorType":null,"userId":null,"linkMetadata":null},{"__typename":"Markup","type":"STRONG","start":360,"end":380,"href":null,"anchorType":null,"userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_23":{"__typename":"Paragraph","id":"bbd7e798da78_23","name":"4635","type":"H3","href":null,"layout":null,"metadata":null,"text":"Conclusion","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_24":{"__typename":"Paragraph","id":"bbd7e798da78_24","name":"c958","type":"P","href":null,"layout":null,"metadata":null,"text":"The stability of your app is important for your users and your brand. Start using Kotlin to reduce crash rates, keep your users happy and stay on top of your retention and acquisition by keeping a high app rating.","hasDropCap":null,"dropCapImage":null,"markups":[],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"Paragraph:bbd7e798da78_25":{"__typename":"Paragraph","id":"bbd7e798da78_25","name":"2b04","type":"P","href":null,"layout":null,"metadata":null,"text":"Read more about how you can Build Better Apps with Kotlin, and see how developers have benefited from Kotlin by reading our case studies. To make your first steps with Kotlin, one of the most loved languages in the world, check out our Getting started page.","hasDropCap":null,"dropCapImage":null,"markups":[{"__typename":"Markup","type":"A","start":28,"end":57,"href":"https:\u002F\u002Fdeveloper.android.com\u002Fkotlin\u002Fbuild-better-apps","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":124,"end":136,"href":"https:\u002F\u002Fdeveloper.android.com\u002Fkotlin\u002Fstories","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":167,"end":174,"href":"http:\u002F\u002Fd.android.com\u002Fkotlin","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":192,"end":220,"href":"https:\u002F\u002Finsights.stackoverflow.com\u002Fsurvey\u002F2020","anchorType":"LINK","userId":null,"linkMetadata":null},{"__typename":"Markup","type":"A","start":236,"end":256,"href":"https:\u002F\u002Fdeveloper.android.com\u002Fkotlin\u002Ffirst","anchorType":"LINK","userId":null,"linkMetadata":null}],"codeBlockMetadata":null,"iframe":null,"mixtapeMetadata":null},"CollectionViewerEdge:collectionId:95b274b437c2-viewerId:lo_512b231b7e37":{"__typename":"CollectionViewerEdge","id":"collectionId:95b274b437c2-viewerId:lo_512b231b7e37","isEditor":false,"isMuting":false},"UserViewerEdge:userId:d5885adb1ddf-viewerId:lo_512b231b7e37":{"__typename":"UserViewerEdge","id":"userId:d5885adb1ddf-viewerId:lo_512b231b7e37","isMuting":false},"ImageMetadata:1*5pMw_nx55x_66tk77kutPQ.png":{"__typename":"ImageMetadata","id":"1*5pMw_nx55x_66tk77kutPQ.png","originalWidth":600,"originalHeight":72},"PostViewerEdge:postId:b606c6a6ac04-viewerId:lo_512b231b7e37":{"__typename":"PostViewerEdge","shouldIndexPostForExternalSearch":true,"id":"postId:b606c6a6ac04-viewerId:lo_512b231b7e37"},"Tag:kotlin":{"__typename":"Tag","id":"kotlin","displayTitle":"Kotlin","normalizedTagSlug":"kotlin"},"Tag:kotlin-beginners":{"__typename":"Tag","id":"kotlin-beginners","displayTitle":"Kotlin Beginners","normalizedTagSlug":"kotlin-beginners"},"Tag:android":{"__typename":"Tag","id":"android","displayTitle":"Android","normalizedTagSlug":"android"},"Tag:android-app-development":{"__typename":"Tag","id":"android-app-development","displayTitle":"Android App Development","normalizedTagSlug":"android-app-development"},"Tag:buildbetterapps":{"__typename":"Tag","id":"buildbetterapps","displayTitle":"Buildbetterapps","normalizedTagSlug":"buildbetterapps"},"Post:b606c6a6ac04":{"__typename":"Post","id":"b606c6a6ac04","collection":{"__ref":"Collection:95b274b437c2"},"content({\"postMeteringOptions\":{\"referrer\":\"\"}})":{"__typename":"PostContent","isLockedPreviewOnly":false,"bodyModel":{"__typename":"RichText","sections":[{"__typename":"Section","name":"f3e0","startIndex":0,"textLayout":null,"imageLayout":null,"backgroundImage":null,"videoLayout":null,"backgroundVideo":null}],"paragraphs":[{"__ref":"Paragraph:bbd7e798da78_0"},{"__ref":"Paragraph:bbd7e798da78_1"},{"__ref":"Paragraph:bbd7e798da78_2"},{"__ref":"Paragraph:bbd7e798da78_3"},{"__ref":"Paragraph:bbd7e798da78_4"},{"__ref":"Paragraph:bbd7e798da78_5"},{"__ref":"Paragraph:bbd7e798da78_6"},{"__ref":"Paragraph:bbd7e798da78_7"},{"__ref":"Paragraph:bbd7e798da78_8"},{"__ref":"Paragraph:bbd7e798da78_9"},{"__ref":"Paragraph:bbd7e798da78_10"},{"__ref":"Paragraph:bbd7e798da78_11"},{"__ref":"Paragraph:bbd7e798da78_12"},{"__ref":"Paragraph:bbd7e798da78_13"},{"__ref":"Paragraph:bbd7e798da78_14"},{"__ref":"Paragraph:bbd7e798da78_15"},{"__ref":"Paragraph:bbd7e798da78_16"},{"__ref":"Paragraph:bbd7e798da78_17"},{"__ref":"Paragraph:bbd7e798da78_18"},{"__ref":"Paragraph:bbd7e798da78_19"},{"__ref":"Paragraph:bbd7e798da78_20"},{"__ref":"Paragraph:bbd7e798da78_21"},{"__ref":"Paragraph:bbd7e798da78_22"},{"__ref":"Paragraph:bbd7e798da78_23"},{"__ref":"Paragraph:bbd7e798da78_24"},{"__ref":"Paragraph:bbd7e798da78_25"}]},"validatedShareKey":"","shareKeyCreator":null},"creator":{"__ref":"User:d5885adb1ddf"},"inResponseToEntityType":null,"isLocked":false,"isMarkedPaywallOnly":false,"lockedSource":"LOCKED_POST_SOURCE_NONE","mediumUrl":"https:\u002F\u002Fmedium.com\u002Fandroiddevelopers\u002Ffewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04","primaryTopic":{"__ref":"Topic:64756708407c"},"topics":[{"__typename":"Topic","slug":"android-development"},{"__typename":"Topic","slug":"programming"}],"isLimitedState":false,"isPublished":true,"allowResponses":true,"latestPublishedVersion":"bbd7e798da78","visibility":"PUBLIC","postResponses":{"__typename":"PostResponses","count":0},"responseDistribution":"NOT_DISTRIBUTED","clapCount":662,"title":"Fewer crashes and more stability with Kotlin","isSeries":false,"sequence":null,"uniqueSlug":"fewer-crashes-and-more-stability-with-kotlin-b606c6a6ac04","socialTitle":"","socialDek":"","canonicalUrl":"","metaDescription":"","latestPublishedAt":1603984247776,"readingTime":3.486792452830189,"previewContent":{"__typename":"PreviewContent","subtitle":"Users expect to have a seamless experience with your app. Crashes can lead to an increase in poor reviews, uninstalls and even damaging…"},"previewImage":{"__ref":"ImageMetadata:1*xpV09u6FyIP96us3K7nDIg.jpeg"},"isShortform":false,"seoTitle":"","firstPublishedAt":1603984247776,"updatedAt":1639646889721,"shortformType":"SHORTFORM_TYPE_LINK","seoDescription":"","viewerEdge":{"__ref":"PostViewerEdge:postId:b606c6a6ac04-viewerId:lo_512b231b7e37"},"isSuspended":false,"license":"ALL_RIGHTS_RESERVED","tags":[{"__ref":"Tag:kotlin"},{"__ref":"Tag:kotlin-beginners"},{"__ref":"Tag:android"},{"__ref":"Tag:android-app-development"},{"__ref":"Tag:buildbetterapps"}],"isFeaturedInPublishedPublication":false,"isNewsletter":false,"statusForCollection":"APPROVED","pendingCollection":null,"detectedLanguage":"en","wordCount":871,"layerCake":3,"responsesLocked":false}}</script><script>window.__MIDDLEWARE_STATE__={"session":{"xsrf":""},"cache":{"cacheStatus":"MISS"}}</script><script src="https://cdn-client.medium.com/lite/static/js/manifest.8b67b313.js"></script><script src="https://cdn-client.medium.com/lite/static/js/9865.1496d74a.js"></script><script src="https://cdn-client.medium.com/lite/static/js/main.94ea62ed.js"></script><script src="https://cdn-client.medium.com/lite/static/js/instrumentation.5bef8967.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/reporting.ff22a7a5.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9120.5df29668.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5049.d1ead72d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4505.6dfaf853.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6618.db187378.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9380.fb176dee.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2707.dc8dbee4.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/9977.933c1c9a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8599.68bc318b.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3045.1cc3d8cb.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6349.3329b100.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2648.26563adf.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8393.a4ecfb83.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6428.36238b5a.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6199.6da73f3b.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5642.7d9f7f3d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6546.67eb283b.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6834.8aa8d357.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/4492.0c3e1a1d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2571.6814b962.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/839.1c286b32.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/6128.f8800a13.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2135.2e8dc177.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/7975.60bcefe8.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/144.86429b48.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/5240.6281357f.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8819.c627c2bf.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8204.d0637ed0.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostPage.MainContent.c3ee9367.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/8414.0d800846.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/3974.8d3e0217.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/2527.18a8996d.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/PostResponsesContent.e1e580cb.chunk.js"></script> <script src="https://cdn-client.medium.com/lite/static/js/responses.editor.e89462cb.chunk.js"></script><script>window.main();</script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9134b9a72e353f7b',t:'MTczOTc4NDI3NS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10