Bagaimana cara keluar dari aplikasi dan menampilkan layar beranda?


196

Saya memiliki aplikasi di mana pada halaman beranda saya memiliki tombol untuk navigasi melalui aplikasi.

Pada halaman itu saya memiliki tombol "EXIT" yang ketika diklik akan membawa pengguna ke layar beranda di telepon di mana ikon aplikasi berada.

Bagaimana saya bisa melakukan itu?

Jawaban:


327

Desain Android tidak mendukung keluarnya aplikasi dengan pilihan, melainkan mengaturnya dengan OS. Anda dapat memunculkan aplikasi Beranda dengan Maksud yang sesuai:

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

25
Anda bahkan dapat menggunakan .. "moveTaskToBack (true);"
hemanth kumar

17
apakah itu akan memindahkan semua sumber daya? Karena ketika saya keluar dari aplikasi dengan cara ini dan setelah beberapa waktu saya mengklik ikon aplikasi lagi. Itu dimulai dari tempat saya meninggalkannya. Itu berarti aplikasi masih berjalan di latar belakang.
Adil Malik

12
Activity.finish ();
hB0

11
Ini membuat aplikasi Anda tetap di latar belakang, sehingga tidak keluar dari aplikasi.
Herman Schoenfeld

3
Jawaban ini hanya akan membuat layar beranda muncul dan tidak akan keluar / menutup aplikasi sepenuhnya seperti yang diinginkan OP.
Basher51

74

Mungkin Anda dapat mencoba sesuatu seperti ini

Misalkan dalam aplikasi kita, kita memiliki sejumlah kegiatan (katakanlah sepuluh) dan kita harus keluar langsung dari kegiatan ini. Apa yang bisa kita lakukan adalah, membuat maksud dan pergi ke aktivitas root dan menetapkan bendera di maksud sebagai

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

juga, tambahkan beberapa boolean tambahan ke maksudnya

intent.putExtra("EXIT", true);

Kemudian dalam aktivitas root, periksa nilai booleandan sesuai dengan panggilan selesai (), di onCreate()aktivitas root

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

1
Hanya tidak melakukan apa pun di onCreate untuk meminta selesai.
imcaptor

2
Dalam kasus saya, saya harus menimpa onNewIntentjuga. Karena intnet.getExtras () tetap menjadi nol.
zznq

Dan metode ini akan memulai kembali RootActivityalih-alih melanjutkannya dari tumpukan. Cek di sini untuk mengatasi ini stackoverflow.com/a/26258455/609782
Darpan

29
System.exit(0);

Mungkin itu yang Anda cari. Ini akan menutup seluruh aplikasi dan membawa Anda ke Layar beranda.


1
Haruskah itu keluar huruf kecil?
Carol

1
seharusnya System.exit (0). Tapi itu tidak terlalu berguna.
superarts.org

7
System.exit (0) tidak boleh digunakan seperti yang disarankan oleh tim inti Android.
Dinesh Venkata

2
Saya pikir ini adalah pendekatan terbaik untuk keadaan luar biasa. Katakan untuk aplikasi yang membutuhkan internet dan koneksi memecah beberapa kegiatan ke dalam aplikasi. Dialog peringatan dapat ditampilkan (tanpa tombol). Tombol Kembali perlu keluar dari seluruh aplikasi karena masuk kembali memerlukan login / inisialisasi lagi. System.exit adalah satu-satunya hal yang cukup berhasil yang saya temukan. Tidak yakin tentang @ user1699548 komentar.
Herman Schoenfeld

1
Apakah ini akan membunuh semua layanan yang terkait dengan aplikasi itu juga?
bsara

25

Ini bekerja dengan baik untuk saya.
Tutup semua aktivitas sebelumnya sebagai berikut:

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

Kemudian dalam MainActivity onCreate () metode tambahkan ini untuk menyelesaikan MainActivity

    setContentView(R.layout.main_layout);

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

Ini tidak bekerja untuk saya. Itu meninggalkan aplikasi saya dengan tidak ada yang terlihat, tetapi masih menjalankan beberapa caranya. Saya dapat melihat utas berkeliaran dan menunggu di debugger yang tidak akan pernah benar-benar melakukan apa pun.
Stephen M -pada mogok-

23

selesaikan dulu aplikasi Anda menggunakan metode finish();

dan kemudian tambahkan baris di bawah ini pada onDestroy untuk Menghapus Angkatan tutup

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

3
jangan pernah gunakan ini, karena tidak ada kesempatan untuk membebaskan sumber daya
Jacky

1
-1 karena onDestroy dieksekusi setiap kali Anda meninggalkan aktivitas, tidak hanya ketika tombol kembali ditekan.
Hamzeh Soboh

5
@ Jacky: dan bagaimana mematikan proses tidak membebaskan sumber daya sistem apa pun?
Herman Schoenfeld

1
Mengapa super.onDestroy()setelah itu killProcess()? apakah garis ini akan tercapai?
shoosh

tidakkah ini juga membunuh semua layanan Anda juga?
Irshu

20

Jika Anda ingin mengakhiri suatu kegiatan, Anda cukup menelepon finish(). Namun itu praktik yang buruk untuk memiliki tombol keluar di layar.


2
Saya menggunakannya untuk "Anda harus memperbarui aplikasi ini ke versi terbaru", dan saya tidak ingin mereka terus menggunakannya. Masih praktik yang buruk ...?
beetree

@beetree Ya. Seperti praktik buruk lainnya, ada beberapa kasus yang merupakan satu-satunya pilihan Anda, dan Anda menggunakannya karena mencoba melakukan sesuatu yang lain akan menjadi tidak masuk akal. Intinya adalah praktik yang buruk , tidak seperti sintaksis ilegal , adalah bahwa itu tersedia untuk beberapa kasus, tetapi Anda harus mencoba darndest Anda untuk menemukan cara yang lebih baik untuk melakukannya. Dalam kasus Anda, tidak ada.
Dana Gugatan Monica

17

Beberapa Kegiatan sebenarnya Anda tidak ingin membuka lagi ketika tombol kembali menekan Kegiatan Layar Splash, Aktivitas Layar Selamat Datang, Konfirmasi Windows. Sebenarnya Anda tidak memerlukan ini di tumpukan aktivitas. Anda dapat melakukan ini menggunakan => buka file manifest.xml dan tambahkan atribut

android: noHistory = "true"

untuk kegiatan ini.

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

ATAU

Terkadang Anda ingin menutup seluruh aplikasi dengan menekan tombol kembali tertentu. Di sini praktik terbaik adalah membuka jendela beranda alih-alih keluar dari aplikasi. Untuk itu Anda perlu mengganti metode onBackPressed (). biasanya metode ini membuka aktivitas teratas di stack.

@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);

}

ATAU

Pada tombol kembali ditekan Anda ingin keluar dari aktivitas itu dan Anda juga tidak ingin menambahkan ini di tumpukan aktivitas. metode panggilan selesai () di dalam metode onBackPressed (). itu tidak akan menutup seluruh aplikasi. itu akan pergi untuk aktivitas sebelumnya di stack.

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

16

Tidak disarankan untuk keluar dari Aplikasi Android Anda. Lihat pertanyaan ini untuk lebih jelasnya.

Pengguna selalu dapat keluar dari aplikasi Anda melalui tombol beranda atau dalam aktivitas pertama melalui tombol kembali.


3
@janusz: menekan tombol home tidak pernah berhenti dari aplikasi android, alih-alih itu berjalan di latar belakang ...
Jayesh

5

(Saya mencoba jawaban sebelumnya tetapi tidak memiliki beberapa poin. Misalnya jika Anda tidak melakukan return;aktivitas setelah selesai, kode aktivitas yang tersisa berjalan. Anda juga perlu mengedit onCreate dengan pengembalian. Jika Anda tidak menjalankan super.onCreate () Anda akan mendapatkan kesalahan runtime)

Katakanlah Anda memiliki MainActivitydan ChildActivity.

Di dalam ChildActivity tambahkan ini:

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

Di dalam MainActivity's onCreate tambahkan ini:

@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

Ketika Anda memanggil selesai padaDestroy () dari aktivitas itu akan dipanggil dan itu akan kembali ke aktivitas sebelumnya di tumpukan aktivitas ... Jadi .. untuk keluar jangan panggil finish ();


3

Inilah yang saya lakukan:

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();
}

Pada dasarnya apa yang Anda lakukan adalah menghapus semua aktivitas dari tumpukan dan peluncuran QuitAppActivity, yang akan menyelesaikan tugas.


Pendekatan yang bagus. Tidak perlu meneruskan nilai melalui Intent.
user3144836

0

Tambahkan baris berikut setelah finish();di onDestroy():

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

0

Saya mencoba keluar dari aplikasi menggunakan cuplikan kode berikut, ini berhasil untuk saya. Semoga ini bisa membantu Anda. saya melakukan demo kecil dengan 2 kegiatan

aktivitas pertama

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;
        }
    }
}

Anda aktivitas lainnya

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

Saya melakukannya dengan mode pengamat.

Antarmuka pengamat

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

Subjek Dasar

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);
    }
}
}

Subjek Anak mengimplementasikan metode keluar

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

Aplikasi saya yang harus diperluas oleh aplikasi Anda

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

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

}

Aktivitas Dasar

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();
}

}

ayo kita coba

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

0

jika Anda ingin keluar dari aplikasi, letakkan kode ini di bawah fungsi Anda

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% berfungsi dengan baik. ini adalah kode untuk Keluar dari aplikasi Anda diKlik (Metode)

    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

Anda bisa menambahkan moveTaskToBack(true)di tombol keluar Anda onClickedListeneruntuk meminimalkan aplikasi.

Semoga ini bisa membantu.


0

Mungkin kode saya dapat hepls (Main_Activity.java):

    @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

Jika Anda ingin keluar dari aplikasi Anda. Kemudian gunakan kode ini di dalam acara yang ditekan tombol Anda. Suka:

public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.