Как выйти из приложения и показать главный экран?

У меня есть приложение, где на домашней странице у меня есть кнопки для навигации по приложению.

На этой странице у меня есть кнопка "EXIT", которая при щелчке должна вывести пользователя на главный экран телефона, где находится значок приложения.

Как я могу это сделать?

Ответ 1

Android-дизайн не способствует удалению приложения по своему выбору, а скорее управляет его ОС. Вы можете вызвать приложение "Домой" соответствующим соответствующим образом:

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

Ответ 2

Может быть, вы можете попробовать что-то вроде этого

Предположим, что в нашем приложении у нас есть ряд действий (скажем, десять), и нам нужно выйти непосредственно из этой деятельности. Мы можем сделать это, создать намерение и перейти к корневой активности и установить флаг в намерении как

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

также добавьте дополнительные значения, например boolean, в намерение

intent.putExtra("EXIT", true);

Затем в корневой активности проверьте значение boolean и в соответствии с этим завершением вызова() в onCreate() корневой активности

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

Ответ 3

System.exit(0);

Возможно, вы ищете. Он закроет все приложение и перенесет вас на главный экран.

Ответ 4

Это хорошо работает для меня.
Закройте все предыдущие действия следующим образом:

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

Затем в методе MainActivity onCreate() добавьте это, чтобы завершить MainActivity

    setContentView(R.layout.main_layout);

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

Ответ 5

сначала закончите свое приложение, используя метод finish();

а затем добавить строки в onDestroy для удаления Force close

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

Ответ 6

Если вы хотите закончить действие, вы можете просто вызвать finish(). Однако плохой практикой является кнопка выхода на экран.

Ответ 7

Не рекомендуется выходить из приложения Android. Подробнее см. question.

Пользователь всегда может выйти из приложения через домашнюю кнопку или в первом действии с помощью кнопки "Назад".

Ответ 8

Некоторые действия на самом деле вы не хотите открывать снова, когда кнопка "Назад" нажата, например, "Активность заставки", "Активность приветствия", "Подтверждение Windows". На самом деле вам это не нужно в стеке действий. вы можете сделать это, используя = > открыть файл manifest.xml и добавить атрибут

Android: noHistory = "истина"

для этих действий.

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

ИЛИ

Иногда вам нужно закрыть все приложение на определенной кнопке "Назад" . Здесь лучше всего открыть окно дома вместо выхода из приложения. Для этого вам необходимо переопределить метод onBackPressed(). обычно этот метод открывает верхнюю активность в стеке.

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

}

ИЛИ

В нажатой кнопке "Назад" вы хотите выйти из этого действия, а также не хотите добавлять это в стек активности. call finish() внутри метода onBackPressed(). он не будет закрывать все приложение. он пойдет для предыдущего действия в стеке.

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

Ответ 9

(Я попробовал предыдущие ответы, но им не хватает в некоторых точках. Например, если вы не выполняете return; после завершения операции, выполняется оставшийся код активности. Также вам нужно отредактировать onCreate с возвратом. run super.onCreate() вы получите ошибку времени выполнения)

Скажите, что у вас есть MainActivity и ChildActivity.

Внутри ChildActivity добавьте это:

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

Внутри MainActivity onCreate добавьте это:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

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

Ответ 10

Существует еще один вариант использования метода FinishAffinity для закрытия всех задач в стеке, связанных с приложением.

См: fooobar.com/questions/34152/...

Ответ 11

Когда будет вызываться завершение вызова onDestroy() этого действия, и оно вернется к предыдущему действию в стеке действий... Итак.. для выхода не вызывайте finish();

Ответ 12

Вот что я сделал:

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

По сути, вы очистили все действия из стека и запустите QuitAppActivity, что завершит задачу.

Ответ 13

Добавьте следующие строки после finish(); в onDestroy():

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

Ответ 14

Я попытался выйти из приложения, используя следующий фрагмент кода, это сработало для меня. Надеюсь, это поможет вам. я сделал небольшую демонстрацию с двумя действиями

первая активность

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

ваше любое другое действие

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

Ответ 15

Я сделал это в режиме наблюдателя.

Интерфейс наблюдателя

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

Основной объект

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

Детский объект реализует метод выхода

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

MyApplication, которое ваше приложение должно расширять.

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

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

}

Базовая активность

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

}

проверить его

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

Ответ 16

если вы хотите выйти из приложения поместите этот код под свою функцию

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

Ответ 17

100% работает нормально. это код для выхода из приложения onClick (метод)

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

        }
    });

Ответ 18

Если вы хотите выйти из приложения. Затем используйте этот код внутри нажатой кнопки. как:

public void onBackPressed()
{
    moveTaskToBack(true);
    android.os.Process.killProcess(android.os.Process.myPid());
    System.exit(1);
}