Масъулон мешавед, ки метавонад ба рехтани хотира дар барномаҳои 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 эркин бўлмайди
}
}
Ушбу оқибатларни олдини олиш учун, объектларнинг ҳаёт циклларини тўғри бошқариш ва ресурсларни бўшаш муҳимдир.