Sobes.tech
Junior — Middle

Масъулон мешавед, ки метавонад ба рехтани хотира дар барномаҳои Android оварда расонад, мисолҳо медиҳед?

sobes.tech AI

Ҷавоб аз AI

Асосий сәбаблар Android дастурларида хотира оқибатлари:

  • Давомли ишлатилувчи ҳаволалар Activity ёки View контекстига. Масалан, статик ўзгарувчилар Activityга ҳавола қилса, у уларни йиғувчи мусобақа уларни олиб ташлашга тўсқинлик қилади.

  • Тингловчилар ва қайтма чақиришларни нотўғри ишлатиш. Агар тингловчи ёзилмаса, у объектга ҳавола қилиши мумкин.

  • Илкдаги классга номли ички синфлар ва ламбда ифодалардан фойдаланиш, улар номаълум равишда ташқи синфга ҳавола қилади.

  • Ресурсларни нотўғри бошқариш, масалан, ёпилмаган Cursor, InputStream, Bitmap.

  • Activityга ҳавола қилувчи кечиктирилган Handler ёки хабарлардан фойдаланиш, улар ўчирилганда тозаланмайди.

  • Катта объектларни чекланмаган ҳажмда кешлаш.

Статик ҳавола орқали оқибат мисоли:

class MyActivity : AppCompatActivity() {
    companion object {
        var leakedReference: MyActivity? = null
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        leakedReference = this // Activity эркин бўлмайди
    }
}

Ушбу оқибатларни олдини олиш учун, объектларнинг ҳаёт циклларини тўғри бошқариш ва ресурсларни бўшаш муҳимдир.