Android uygulamamda bir buton var. Bu butona basıldığı anda uygulamadan çıkmasını istiyorum.Bunun için şu kodu kullandım.Ancak bu kod bir önceki sayfaya gönderiyor uygulamayı.BEnim istediğim ise tüm uygulamayı sonlandırması. Kod şu şekilde; @Override public void onClick(View v) {

    if(v.getId()==cik.getId())
    {
        finish();
        System.exit(0);
    }

soruldu: 19 Tem '12, 08:55

emax_64's gravatar image

emax_64
64589102101
cevap kabul oranı: 20%

değiştirildi: 19 Tem '12, 08:55


Android işletim sistemlerinde Activity Stack denilen LIFO mantığındaki stack yapısı şu şekilde çalışır. Uygulama ilk açıldığında çağırılan Activity, Stack'e itilir. Bu Activity içinden başka bir Activity çağırıldığında bu Activity de stack'e itilir. Ekranda görüntülenen Activity, Stack Act.'nin en üstünde yer alan Activity'dir.

finish() metodu (görüntülenen activity içinden) çağırıldığında görüntülenmekte olan Activity stack'ten çekilir. Bu işlemden sonra stackte en üstte kalan activity görüntülenir. Dolayısıyla birden fazla activity kullandığınız uygulamalarınızda finish() metoduyla uygulamayı değil, o an ekranda görüntülenen activity'i sonlandırırsınız.

Activity - developers.android.com

Android işletim sisteminde uygulamaların kapatılması teoride kullanıcının değil işletim sisteminin görevidir. Android OS'un kabul ettiği mantık , "uygulamayı kapatmak isteyen kullanıcı home butonunu kullansın kapatsın, ben uygulamayı bellekte tutmaya devam edeyim, bellek ihtiyacım olduğunda sonlandırayım." şeklindedir. Bunun yanında hiçbir işletim sisteminde olmadığı gibi android işletim sisteminde de direkt process'i sonlandırmak güvenli ve önerilen bir yöntem değildir.

Yine de, kullanılma zorunluluğu varsa şu yöntemler denenebilir. Uygulama tek ekrandan oluşuyorsa finish() işinizi görür. Uygulama birden fazla ekrandan oluşuyorsa :

  1. moveTaskToBack(); Çağırıldığı anda, uygulama kapanır ve home screen görüntülenir. Fakat uygulama sonlandırılmaz. Çağırıldığı andaki durumuyla birlikte duraklatılır ve bellekte bekletilir. Cihazın boş belleği azaldıkça bu şekilde bekleyen uygulamalar OS tarafından sonlandırılır. Kısacası cihazınızda "home" butonuyla aynı etkiyi gösterir. Android'le gelen internet tarayıcısı dahil bir çok uygulama bu metodu kullanmaktadır. Dezavantajı : Eğer kullanıcı uygulamayı kapattıktan kısa bir süre sonra tekrar açmaya çalışırsa en son bıraktığı hali açılır, uygulama yeniden başlatılmaz. ( onResume metoduyla bu sıkıntı giderilebilir)
  2. Kullanıcı faktörü : İş tamamen kullanıcıya bırakılır. (bir çok andorid uygulamasında olduğu gibi.) Kullanıcı geri tuşunu kullanarak uygulamayı sonlandırır veya home butonunu kullanarak arkaplana gönderir. Çok fazla ekranı bulunan uygulamalarda bu durum "fazla can sıkıcı" bir hal alır.
  3. Kill Process : Çalışan süreci işletim sistemi düzeyinde zorla sonlandırır. Verikaybına, zombi süreçlere sebep olabilme ihtimali yüksektir ve tavsiye edilmez. Runtime hatası alınan uygulamalardaki force close ekranı bunu kullanır.

Android uygulamarında "uygulama sonlandırma" halen çokça tartışılan ve geliştiricilerin hemfikir olamadığı bir konudur. Yine de en çok önerilen yöntem, native uygulamaların da kullandığı gibi moveTaskToBack() metodudur.

Düzenleme : Şu yöntemi de deneyebilrisiniz. link

permanent link

cevaplandı: 20 Tem '12, 02:35

ersinyildiz's gravatar image

ersinyildiz
2.8k31438
cevap kabul oranı: 29%

değiştirildi: 20 Tem '12, 02:42

Verdiğiniz bilgiler için teşekkürler.

(20 Tem '12, 03:01) emax_64 emax_64's gravatar image

çağırdığın finish() metodu bulunduğu activity'yi sonlandırır ve bir önceki activty çağrılır

programdan direk çıkmak için bu kodu kullanabilirsin

finish();
android.os.Process.killProcess(android.os.Process.myPid());
permanent link

cevaplandı: 19 Tem '12, 16:16

kemal_faust's gravatar image

kemal_faust
812122129
cevap kabul oranı: 28%

söylediğiniz kodu denedim ancak direk olarak uygulamadan çıkış sağlamadı. Bir önceki activiy ye gidiyor gene. Sürüm 2.3.3

(20 Tem '12, 01:50) emax_64 emax_64's gravatar image

anlatmak istediğim bu şekilde alt text

permanent link

cevaplandı: 20 Tem '12, 02:09

emax_64's gravatar image

emax_64
64589102101
cevap kabul oranı: 20%

  1. activity için finish(); metodunu, 3.Activity için de moveTasktoBack(); metodunu kullanabilirsiniz.
(20 Tem '12, 02:37) ersinyildiz ersinyildiz's gravatar image

moveTaskToBack(); yönteminde uygulama tekrar açıldığında kaldığı yerden devam etmemesi,yeniden açılması için ne yapılabilir?Onresume()'dan bahsetmişsiniz biraz açıklayabilir misiniz?

permanent link

cevaplandı: 20 Tem '12, 03:55

alper's gravatar image

alper
96569
cevap kabul oranı: 0%

Bildiğim kadarıyla activity içinde moveTastToBack() metodu çağırıldığında Activity onPause moduna geçirilir ve arkaplanda bekler. Uygulama tekrar çağırıldığında ise onResume metoduyla ne işlem yapmak istediğimizi bildirebiliriz. İşte bu noktada, uygulamamızın açılış Activity'sini çağırabiliriz. Bu varsayımımı henüz deneyemedim, gün içinde deneyip kod örnekleriyle birlikte eklemeye çalışırım.

(20 Tem '12, 04:39) ersinyildiz ersinyildiz's gravatar image
1

Activity başlarken onCreate -> onStart -> OnResume

çıkış butonuna tıklandığında onPause metodu çalışır.

Uygulama tekrar açıldığında onStart -> onResume çalışır.

onCreate metodunda setlenecek bir bayrakla, activity ilk defa mı çalıştırıldı yoksa pause modundan resume moduna mı geçti belirlenebilirse yukarıda bahsettiğim yöntem çalışabilir. Fakat burada da activity life cycle adımları iyi incelenip yapı ona göre kurulmazsa life cycle sonsuz döngüye girebilir.

(20 Tem '12, 05:54) ersinyildiz ersinyildiz's gravatar image
-3

finish(); , uygulamadan çıkmak için yeterlidir.

permanent link

cevaplandı: 19 Tem '12, 10:40

RedLab's gravatar image

RedLab
15113
cevap kabul oranı: 22%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×818

Soruldu: 19 Tem '12, 08:55

Görüntüleme: 3,086 kez

Son güncelleme: 20 Tem '12, 06:05

powered by BitNami OSQA