Uygulamadan nasıl çıkılır ve ana ekran nasıl gösterilir?


196

Ana sayfada uygulamada gezinmek için düğmelerim olan bir uygulamam var.

Bu sayfada, tıklandığında kullanıcıyı uygulama simgesinin bulunduğu telefonda ana ekrana götürmesi gereken bir "EXIT" düğmesi var.

Bunu nasıl yapabilirim?

Yanıtlar:


327

Android'in tasarımı, bir uygulamadan seçimden çıkmayı tercih etmez, daha ziyade işletim sistemi tarafından yönetir. Ev uygulamasını ilgili Niyeti ile getirebilirsiniz:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

25
Hatta kullanabilirsiniz .. "moveTaskToBack (true);"
hemanth kumar

17
tüm kaynakların yerini değiştirecek mi? Çünkü uygulamadan bu şekilde çıktığımda ve bir süre sonra uygulama simgesini tekrar tıklıyorum. Benim kaldığım yerden başlar. Bu, uygulamanın hala arka planda çalıştığı anlamına gelir.
Adil Malik

12
Activity.finish ();
hB0

11
Bu, uygulamanızı arka planda tutar, böylece uygulamadan çıkmaz.
Herman Schoenfeld

3
Bu cevap sadece ana ekranın görünmesini sağlar ve OP'nin istediği gibi uygulamadan tamamen çıkmaz / kapanmaz.
Basher51

74

Belki böyle bir şey deneyebilirsiniz

Diyelim ki başvurumuzda bir takım faaliyetlerimiz var (on diyelim) ve doğrudan bu faaliyetten çıkmamız gerekiyor. Yapabileceğimiz şey, bir niyet yaratmak ve kök etkinliğe gitmek ve niyette bayrağı

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Ayrıca, niyetine boole gibi bazı ekstralar ekleyin

intent.putExtra("EXIT", true);

Sonra kök aktivitede, değerini kontrol booleaniçinde) ve bu çağrı bitirmek (uygun onCreate()kök aktivitesinin

if (getIntent().getBooleanExtra("EXIT", false)) {
 finish();
}

1
Bitirmek için onCreate'de hiçbir şey yapmayın.
Haziran'da imcaptor

2
Benim durumumda da geçersiz kılmak zorunda kaldım onNewIntent. Çünkü intnet.getExtras () null değerini korumuştur.
zznq

Ve bu yöntem RootActivityyığından devam etmek yerine yeniden başlatacaktır . Bu aşmak için buraya Kontrol stackoverflow.com/a/26258455/609782
Darpan

29
System.exit(0);

Muhtemelen aradığınız şey budur. Tüm uygulamayı kapatacak ve sizi ana ekrana götürecektir.


1
Bu küçük harfli bir çıkış mı olmalı?
Carol

1
System.exit (0) olmalıdır. Ama yine de çok kullanışlı değil.
superarts.org

7
System.exit (0), temel Android ekibinin önerdiği şekilde kullanılmamalıdır.
Dinesh Venkata

2
Bunun istisnai durumlar için en iyi yaklaşım olduğunu düşünüyorum. İnternete ihtiyaç duyan bir uygulama için söyleyin ve bağlantı uygulamaya birkaç faaliyeti keser. Bir uyarı iletişim kutusu görüntülenebilir (düğmesiz). Yeniden giriş tekrar giriş / başlatma gerektirdiğinden Geri düğmesinin tüm uygulamadan çıkması gerekir. System.exit, makul bir şekilde çalıştığım tek şey. @ User1699548 yorumundan emin değilim.
Herman Schoenfeld

1
Bu uygulama ile ilgili tüm hizmetleri de öldürecek mi?
bsara

25

Bu benim için iyi çalışıyor.
Önceki tüm etkinlikleri aşağıdaki gibi kapatın:

    Intent intent = new Intent(this, MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("Exit me", true);
    startActivity(intent);
    finish();

Sonra MainActivity onCreate () yönteminde MainActivity'yi bitirmek için bunu ekleyin

    setContentView(R.layout.main_layout);

    if( getIntent().getBooleanExtra("Exit me", false)){
        finish();
        return; // add this to prevent from doing unnecessary stuffs
    }

Bu benim için işe yaramıyor. Uygulamamı görünür hiçbir şey bırakmadan bırakır, ancak yine de nasıl çalışır. Asla hiçbir şey yapmaz hata ayıklayıcı içinde asılı ve bekleyen konuları görebilirsiniz.
Stephen M -on grev-

23

önce uygulamanızı yöntemi kullanarak bitirin finish();

ve onDestroy Kaldırma Kuvveti için aşağıdaki satırları ekleyin kapat

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();

3
bunu asla kullanmayın, çünkü kaynakları serbest
bırakma

1
-1 çünkü onDestroy, yalnızca geri tuşuna basıldığında değil, etkinlikten her çıktığınızda yürütülür.
Hamzeh Soboh

5
@Jacky: Ve süreci öldürmek hiçbir sistem kaynağını nasıl serbest bırakmıyor?
Herman Schoenfeld

1
Neden super.onDestroy()sonra killProcess()? hatta bu hatta ulaşılabilir mi?
shoosh

bu aynı zamanda tüm hizmetlerinizi de öldürmez mi?
Irshu

20

Bir aktiviteyi bitirmek istiyorsanız, sadece arayabilirsiniz finish(). Ancak ekranda bir çıkış düğmesi olması kötü bir uygulamadır.


2
"Bu uygulamayı en son sürüme güncellemeniz gerekiyor" için kullanıyorum ve kullanmaya devam etmelerini istemiyorum. Hala kötü uygulama ...?
beetree

@beetree Evet. Herhangi bir kötü uygulama gibi, tek seçeneğiniz olan durumlar vardır ve bunu kullanırsınız çünkü başka bir şey yapmaya çalışmak saçma olurdu. Kötü uygulama olmasının amacı, yasadışı sözdiziminin aksine , bu birkaç durum için mevcut olmasıdır, ancak bunu yapmak için daha iyi bir yol bulmak için en dar olanı denemelisin. Senin durumunda, bir tane yok.
Monica'nın Davası

17

Bazı Aktiviteler, Geri düğmesine böyle Açılış Ekranı Etkinliği, Karşılama Ekranı Etkinliği, Onay Pencereleri'ne basıldığında tekrar açmak istemezsiniz. Aslında aktivite yığınında buna ihtiyacınız yok. => open manifest.xml dosyasını kullanarak bunu yapabilir ve bir nitelik ekleyebilirsiniz

android: noHistory = "true"

bu faaliyetlere.

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

VEYA

Bazen belirli geri düğmesine basarak tüm uygulamayı kapatmak istersiniz. Burada en iyi uygulama uygulamadan çıkmak yerine ana pencereyi açmaktır. Bunun için onBackPressed () yöntemini geçersiz kılmanız gerekir. genellikle bu yöntem yığındaki en üst etkinliği açar.

@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

VEYA

Geri düğmesine basıldığında o etkinlikten çıkmak istersiniz ve ayrıca bunu etkinlik yığınına eklemek istemezsiniz. onBackPressed () yöntemi içinde call finish () yöntemini çağırın. tüm uygulamayı kapatmaz. yığındaki bir önceki etkinliğe gider.

@Override
public void onBackPressed() {
  finish();
}

16

Android Uygulamanızdan çıkmanız önerilmez. Daha fazla ayrıntı için bu soruya bakın.

Kullanıcı, uygulamanızı her zaman ana sayfa düğmesinden veya ilk etkinlikte geri düğmesi aracılığıyla kapatabilir.


3
@janusz: ev düğmesine basmak android uygulamasından asla çıkmaz, bunun yerine arka planda gider ...
Jayesh

5

(Önceki yanıtları denedim ama bazı noktalarda eksikler. Örneğin return;, etkinliği bitirdikten sonra bir şey yapmazsanız , kalan etkinlik kodu çalışır. Ayrıca, dönüş ile onCreate'ı düzenlemeniz gerekir. Super.onCreate () bir çalışma zamanı hatası alırsınız)

Söyle MainActivityve var ChildActivity.

Inside ChildActivity bunu ekleyin:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

Inside MainActivity's onCreate bunu ekleyin:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}


3

Bu etkinliğin bitiş onDestroy () u çağrıldığında ve etkinlik yığınında önceki etkinliğe geri döner ... Yani .. çıkış için bitirme ();


3

İşte yaptığım şey:

SomeActivity.java

 @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }

QuitAppActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      finish();
}

Temel olarak yaptığınız şey, QuitAppActivitygörevi bitirecek olan yığın ve başlatma işlemlerinden temizlenir .


Iyi bir yaklaşım. Niyet yoluyla değer aktarmaya gerek yok.
user3144836

0

Sonra hatları aşağıdaki ekleyin finish();içinde onDestroy():

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();

0

Aşağıdaki kod snippet'i kullanarak uygulamadan çıkmayı denedim, bu benim için çalıştı. Umarım bu size yardımcı olur. 2 aktivite ile küçük demo yaptım

ilk aktivite

public class MainActivity extends Activity implements OnClickListener{
    private Button secondActivityBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        secondActivityBtn=(Button) findViewById(R.id.SecondActivityBtn);
        secondActivityBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();

        if(pref.getInt("exitApp", 0) == 1){
            editer.putInt("exitApp", 0);
            editer.commit();
            finish();
        }
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.SecondActivityBtn:
            Intent intent= new Intent(MainActivity.this, YourAnyActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }
}

başka herhangi bir faaliyetin

public class YourAnyActivity extends Activity implements OnClickListener {
    private Button exitAppBtn;
    private SharedPreferences pref;
    private SharedPreferences.Editor editer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_any);

        exitAppBtn = (Button) findViewById(R.id.exitAppBtn);
        exitAppBtn.setOnClickListener(this);

        pref = this.getSharedPreferences("MyPrefsFile", MODE_PRIVATE);
        editer = pref.edit();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.exitAppBtn:
            Intent main_intent = new Intent(YourAnyActivity.this,
                    MainActivity.class);
            main_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main_intent);
            editer.putInt("exitApp",1);
            editer.commit();
            break;
        default:
            break;
        }
    }
}

0

Gözlemci modda yaptım.

Gözlemci arayüzü

public interface Observer {
public void update(Subject subject);
}

Temel Konu

public class Subject {
private List<Observer> observers = new ArrayList<Observer>();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}

Alt Konu çıkış yöntemini uygular

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

Uygulamanızın genişletmesi gereken Uygulamam

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

Temel Etkinlik

public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}

hadi test edelim

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}

0

uygulamadan çıkmak istiyorsanız bu kodu fonksiyonunuza ekleyin

public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}

0

% 100 iyi çalışıyor. bu onClick (Yöntem) uygulamanızdan çıkma kodu

    Button exit = (Button)findViewById(R.id.exitbutton);

    exit.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View view) {

            finish();
            android.os.Process.killProcess(android.os.Process.myPid());
            System.exit(1);
            Toast.makeText(getApplicationContext(), "Closed Completely and Safely", Toast.LENGTH_LONG).show();

        }
    });

0

Uygulamayı en aza indirmek moveTaskToBack(true)için çıkış düğmelerinizi ekleyebilirsiniz onClickedListener.

Umarım yardımcı olur.


0

Belki kodum hepls (Main_Activity.java) olabilir:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        this.finish();
        exit(0);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        switch(keyCode)    {
            case KeyEvent.KEYCODE_BACK:
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("My application").setMessage("Keep playing?").setIcon(R.drawable.icon);
                // Go to backgroung
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { moveTaskToBack(true); }
                });
                // Exit from app calling protected void onDestroy()
                builder.setNegativeButton("CLOSE APPLICATION", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { onDestroy(); }
                });
                // Close this dialog
                builder.setNeutralButton("CANCEL", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) { dialog.cancel(); }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
                return true;
        }
        return false;
    }

-2

Başvurunuzdan çıkmak istiyorsanız. Ardından düğmeye basılan etkinliğin içindeki bu kodu kullanın. sevmek:

public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.