Android Veri Saklama
-
Merhabalar şöyle birşeye ihtiyacım var.
Şimdi elimizde bir Class olsun şu şekilde
class MyClass{ public static name; }
Şu class'ı Ben saklamak istiyorum. Şöyle ki . Activity onCreate methodunu işlerken bu name kısmını doldurayım.
onCreate(){ MyClass.name="deneme"; }
onCreate bölümünde bu name değerine denemeyi atadık... Daha sonra uygulamamızı kapattık (Uygulama ayarlarından Force stop kısmı dışında mesela menü kısına basılı tuttuğunuzda arkada açık uygulamalar var bunları sağa sola çekince kapanıyor ya ondan bahsediyorum.) kapattığı için static değişken 0/null/"" şeklinde artık tipine göre bir değer aldı.
Bende bunu istemiyorum... Yani bu static değişken uygulama kapansa bile ben bunu kullanmak istiyorum... Tekrar uygulama açıldığında bu class'ı kullanmak istiyorum. Yani şöyle ki. Uygulama kapatıldı ve tekrar acıldı.
Ben onCreate methoduna
onCreate(){ Log.e(TYPE,MyClass.name); }
yazdığımda bana deneme çıktısını versin istiyorum. Böyle birşey mümkün mü ? Servis ile falan saklayamaz mıyım bunu ???
BroadCastReciever uygulamayı tetikleyen birşey. Buraya static tanımlasam bunu yemez. Çünkü sistem tarafından gelen dürtüye göre o class oluşturuluyor yani tek sefer oluşturulup siliniyor. Sonra tekrar dürtü gelince tekrar oluşuyor vs. Bu yemedi. Servislerin hepsini denedim yemedi..Yani ben öyle birşey istiyorum ki. Uygulama kapansa dahi arka planda benim çalışan bir kodum veya static değişkenlerim kalsın bunlar temizlenmesin...
Bir nebi garbage collector'u yönetmek gibi birşey sanırım bu bu konuda da hiçbir bilgim yok.
------------------------------------------------------------
SharedPreferances , SqLite , Api , Gson vs gibi şeyler önermeyin bundan bahsetmiyorum burda data saklamaktan bahsetmiyorum. Sadece uygulama kapansa bile benim 1 tane Class'ımın sürekli birşeyleri saklamasını istiyorum o class ölmesin. kalsın yaşasın onun içerisindeki datalar silinmesin... gibi....
Böyle birşey mümkün mü ? Yapabilir miyim ? Mümkünse nasıl yaparım veya ne diye geçiyor bu olay .
-
Bkz. object serialization ( https://stackoverflow.com/questions/447898/what-is-object-serialization )
-
Denedim hocam bunu ben yemedi. Şu şekilde yazdım
public class Creator implements Serializable{ private static final long serialVersionUID = 475914219638093041L; private Long creatorID; private String creatorName; //...... }
ama uygulama sonlandırıldığında o class komple çöp. İçi boşalıyor datalar default değerine geçiyor ...
Hocam bu dediğin olay da zaten datayı saklamak değil mi ? ben Objeyi stackden silinmesini istemiyorum .... Yani Gson dan bir farkı yok bu dediğiniz olayın zaten.
-
Bildiğim kadarıyla bunun bir yolu yok. Çünkü senin yazdığın uygulama tamamen dalvik ya da art sanal makinesinin içinde çalışıyor. Uygulaman sonlandırılınca vm örneği de bellekten kaldırılıyor.
Çözüm (yine bildiğim kadarıyla) dendiği gibi. Nesneni serileştirip onCreate olayında çözmek. Artık serileştirilmiş veriyi dosya tabanlı, sqliteta vs. nerede saklayacağın sana kalmış.
Ekleme: Servis de yazsan servisin çökmeyeceği garanti olmadığı için çözüm değil.
YeniHarman tarafından 30/Tem/17 18:43 tarihinde düzenlenmiştir -
YeniHarman bunu yazdı
Bildiğim kadarıyla bunun bir yolu yok. Çünkü senin yazdığın uygulama tamamen dalvik ya da art sanal makinesinin içinde çalışıyor. Uygulaman sonlandırılınca vm örneği de bellekten kaldırılıyor.
Çözüm (yine bildiğim kadarıyla) dendiği gibi. Nesneni serileştirip onCreate olayında çözmek. Artık serileştirilmiş veriyi dosya tabanlı, sqliteta vs. nerede saklayacağın sana kalmış.
Ekleme: Servis de yazsan servisin çökmeyeceği garanti olmadığı için çözüm değil.
Yapı yaşayan birşey olduğu için. Sürekli bir iletişim söz konusu. Systemin içerisinden gelen verilere göre bu class'ı tetikliyorum bende. tıpkı broadcast gibi birşey ama içerisindeki veriler yok olunca sorun büyüyor. class'ın gebermemesi gerekiyor yani...
Bunun için ART içerisine birşeyler gömmem gerekiyor bu da şuan için mümkün değilmiş. Telefon rootlanınca bi nevi birşeler olabilir ama rootlanırsa telefon bu sefer de müşterinin güveni kaybolur.. Her neyse ben biraz daha araştırayım vardır elbet birşeyler. Olmadı Gson , Serileştirme vs gibi çözümlerle verileri saklayıp bir şekilde classım öldüğü anda tekrar dirilteyim. böyle çözümler bulsam yeterli olacaktır şimdiki hedefim Servisin veya Uygulamanın Öldüğü anda broadcast ile tekrar classı yapılandırmak gibi şeyler bu çözümleri bulup deneyeyim.
-
SORUN ÇÖZÜLDÜ ;
Çözümü Çooooookk ama çoooook uzun olduğundan buraya ekleyemeyeceğim.
kendi siteme ekleyip buradan konuyu güncellerim link veririm
Onun dışında böyle birşeye ihtiyacı olup da acil olanlar pm den ulaşsın yardımcı olurum.
Class haline getirerek Service içerisinde bu işi halledebiliyoruz.. Telefonun bataryası biraz fazla gidiyor bunun çözümü de garbage collector bunu da halledeceğiz elbette :)
Şimdilik kalın sağlıcakla.