folder Tahribat.com Forumları
linefolder Android - IOS Programlama
linefolder Android Uygulamada Bellek Aşımı



Android Uygulamada Bellek Aşımı

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Odd Emoji 3D
    BerkayCit
    BerkayCit's avatar
    Kayıt Tarihi: 25/Şubat/2011
    Erkek

    Merhaba hocalar,

    Kendi çapımda uğraşıyorum, mobil programlamayla. Çok basit bir sorunum var ama bir türlü çözemedim.

    Şimdi uygulamanın layout unun background una bir bitmap veriyorum.

    Sonra uygulama yeni intent e geçtiği zaman, geçtiğimiz intent in arkaplanındaki bitmapini silmek istiyorum ki bellekte yer kaplamasın.

    Uygulama onResume ile arkaplan fotoğraf ını oluştururken, onPause ilede silmesini bekliyorum. bunun için onPause da, bitmap i recycle ediyor ve null yapıyorum. Ancak bitmap i silmiyor. ve onResume ile bitmap oluşturulduğu için.. sonraki intent e gidip geri gelince uygulamada bellek iyice şişiyor. onPause içinde layout.removeAllViews () falanda denedim ama işe yaramıyor.

     


    havalı bir şeyler yazdığımı hayal edin
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    Hocam merhaba. Manifest içinde

    android:largeHeap="true"

    ekleyip dener misin ?

     

    edit: verdiğim çözüm bitmap i silmek için değil de, outOfMemory hatası almanı engellemek içindir.

    manyaki tarafından 29/Kas/16 12:21 tarihinde düzenlenmiştir

    since 2005 // tbt
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tawe
    Tawe's avatar
    Kayıt Tarihi: 16/Ağustos/2015
    Erkek

    Her seferinde onResume'da olusturup onPause'da silmek yerine, bu Bitmap objesini bir kere olusturup sonrasinda yeni olusturacagin bir classin static objesi yaparsan hem surekli olusturmana gerek kalmaz hem uygulamanin her yerinden hizli bir sekilde erisme imkanin olur hem de bu resmi ne kadar cok yerde kullanirsan kullan memoryde toplamda sadece 1 bitmap tutmus olursun.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Odd Emoji 3D
    BerkayCit
    BerkayCit's avatar
    Kayıt Tarihi: 25/Şubat/2011
    Erkek
    manyaki bunu yazdı

    Hocam merhaba. Manifest içinde

    android:largeHeap="true"

    ekleyip dener misin ?

     

    edit: verdiğim çözüm bitmap i silmek için değil de, outOfMemory hatası almanı engellemek içindir.

    Hocam onu yapmak istemiyorum işte :) memory i düzenlemek istiyorum yoksa çok baş ağrıtacak gibi


    havalı bir şeyler yazdığımı hayal edin
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Odd Emoji 3D
    BerkayCit
    BerkayCit's avatar
    Kayıt Tarihi: 25/Şubat/2011
    Erkek
    Tawe bunu yazdı

    Her seferinde onResume'da olusturup onPause'da silmek yerine, bu Bitmap objesini bir kere olusturup sonrasinda yeni olusturacagin bir classin static objesi yaparsan hem surekli olusturmana gerek kalmaz hem uygulamanin her yerinden hizli bir sekilde erisme imkanin olur hem de bu resmi ne kadar cok yerde kullanirsan kullan memoryde toplamda sadece 1 bitmap tutmus olursun.

    Hocam benim temel problemim o 1 bitmapi bile bellekde tutmak istememem. yani free yapmak istiyorum.


    havalı bir şeyler yazdığımı hayal edin
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tawe
    Tawe's avatar
    Kayıt Tarihi: 16/Ağustos/2015
    Erkek
    BerkayCit bunu yazdı
    Tawe bunu yazdı

    Her seferinde onResume'da olusturup onPause'da silmek yerine, bu Bitmap objesini bir kere olusturup sonrasinda yeni olusturacagin bir classin static objesi yaparsan hem surekli olusturmana gerek kalmaz hem uygulamanin her yerinden hizli bir sekilde erisme imkanin olur hem de bu resmi ne kadar cok yerde kullanirsan kullan memoryde toplamda sadece 1 bitmap tutmus olursun.

    Hocam benim temel problemim o 1 bitmapi bile bellekde tutmak istememem. yani free yapmak istiyorum.

    peki yeni bir activity baslatirken oncekini finish() fonksiyonuyla bitiriyor musun? ya da yeni activity'ni startActivityForResult() fonksiyonuyla baslatip isin bitince geri ayni activity'e dondugune emin misin? kullandigin bitmapin boyutunu bilmiyorum fakat 1 tane bitmapin memory sismesine sebep olacagini sanmiyorum. isi biten fakat finish() yapilmamis activityler androidde memory sismesinin en buyuk sebeplerinden biridir. cunku arkaplanda calisan activityler kendi tuttugu resimlerin, objelerin garbage collector tarafindan temizlenmesini engeller.

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    1 Fragment kullanıyorsan üst üste gelecek Fragmentler ve arka planda bekletilen kodlar yüzünden belleğin şişebilir. Sebebi Recursive function. Arka planda bir Fragmentler bazen birbirine bağlı oalbiliyor keza Activityler de. Yani sen bir activity acıp o activity bitiminden Destroy olduktan sonra dönen değeri bekliyorsan bir öncekinde. Arkada bir Recusive çalışır. Fragment acarken kapatırken vs sürekli boş fragmentleri yakalamalısın. 

    Ek olarak MainThread üzerinde birden cok Thread var ise buda belleğini şişirir.

    1 tane bitmap senin uygulamanı cok fazla belleğe tecavüz etmez. He diyorsan bir android cihaz üzerinde Örneğin 2.2 yüklü 256 mb ram'i olan bir cihazda çalıştırıyorum haliyle öldürüyor.

    android garbage collection araştırmalısın ki Saçma sapan çerezleri silesin Bitmap değerini de null yap collect işleminden önce bu sefer ram'ini iyi kullanmış olursun.

    @manyaki hocam zaten söylemiş sana Manifest'i düzenleyerek yap derim uğraşmana gerek yok.. 

     


    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Odd Emoji 3D
    BerkayCit
    BerkayCit's avatar
    Kayıt Tarihi: 25/Şubat/2011
    Erkek
    Tawe bunu yazdı
    BerkayCit bunu yazdı
    Tawe bunu yazdı

    Her seferinde onResume'da olusturup onPause'da silmek yerine, bu Bitmap objesini bir kere olusturup sonrasinda yeni olusturacagin bir classin static objesi yaparsan hem surekli olusturmana gerek kalmaz hem uygulamanin her yerinden hizli bir sekilde erisme imkanin olur hem de bu resmi ne kadar cok yerde kullanirsan kullan memoryde toplamda sadece 1 bitmap tutmus olursun.

    Hocam benim temel problemim o 1 bitmapi bile bellekde tutmak istememem. yani free yapmak istiyorum.

    peki yeni bir activity baslatirken oncekini finish() fonksiyonuyla bitiriyor musun? ya da yeni activity'ni startActivityForResult() fonksiyonuyla baslatip isin bitince geri ayni activity'e dondugune emin misin? kullandigin bitmapin boyutunu bilmiyorum fakat 1 tane bitmapin memory sismesine sebep olacagini sanmiyorum. isi biten fakat finish() yapilmamis activityler androidde memory sismesinin en buyuk sebeplerinden biridir. cunku arkaplanda calisan activityler kendi tuttugu resimlerin, objelerin garbage collector tarafindan temizlenmesini engeller.

    hayır hocam finish yapmıyordum activity i. startActivityForResult ı da kullanmadım. ama finish i denedim.. direk olarak memory monitor de bir değişim yok. garbage collector sonradan siler mi bilmiyorum?

    @MhmdAlmz anladım hocam.

     


    havalı bir şeyler yazdığımı hayal edin
Toplam Hit: 919 Toplam Mesaj: 8
android memory