Закрытие предыдущих страниц в приложении

Я делаю приложение, которое содержит около 5 страниц вместе с начальным экраном, я знаю, что если я напишу finish() в методе onPause(), страница будет уничтожена после перехода пользователя на следующую страницу.

Мое требование таково, что я не хочу, чтобы AppPage 1 был уничтожен до тех пор, пока я не дойду до третьей страницы приложения, но как только пользователь перейдет на 4-ю страницу приложения, я хочу уничтожить все 1, 2,3 Приложения моего приложения, чтобы они не могли быть доступны, нажав кнопку "Назад" и дойдя до начального экрана моего приложения, которое я не убиваю при запуске приложения.

Итак, я хочу спросить, можно ли убить мое приложение 1,2,3 страницы, когда пользователь нажимает кнопку перехода на следующую страницу третьей страницы.

Спасибо

==== Редактировать =====

Начальный экран → AppPage1 → AppPage2 → AppPage3 → AppPage4 (здесь можно убить AppPage1,2,3, чтобы при нажатии на клик пользователь дошел до sceen) → Appage 5 (Kill AppPage4)

==== Редактировать 2 =====

AppPage1.java

public class AppPage1 extends Activity{

Button goToAppPage2;
BroadcastReceiver logout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.apppage1);

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.closing.application.pages.AppPage1");

    logout = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
          finish();
        }
    };

    registerReceiver (logout, intentFilter);

    goToAppPage2 = (Button) findViewById(R.id.goToAppPage2);
    goToAppPage2.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent i1 = new Intent(AppPage1.this, AppPage2.class);
            startActivity(i1);
        }
    });  

}

@Override
protected void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    unregisterReceiver(logout);
}

}

AppPage2.java

public class AppPage2 extends Activity{

Button goToAppPage3;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.apppage2);

    Intent intent = new Intent("kill");
    intent.setType("spartan!!!");
    sendBroadcast(new Intent(this, AppPage1.class));



    goToAppPage3 = (Button) findViewById(R.id.goToAppPage3);
    goToAppPage3.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            // TODO Auto-generated method stub

            Intent i1 = new Intent(AppPage2.this, AppPage3.class);
            startActivity(i1);

        }
    });    
} 
}

Ответ 1

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

Сначала зарегистрируйте трансляцию в действиях, которые должны быть завершены. Если количество действий велико, вы можете создать родительскую активность, из которой может распространяться другая, поэтому вам не нужно многократно повторять этот код:

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.ACTION_LOGOUT");
BroadcastReceiver logout = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
      finish();
    }
};
registerReceiver (logout, intentFilter);

Не забудьте отменить регистрацию в onDestroy():

unregisterReceiver(logout);

Отправьте трансляцию, когда вы хотите завершить предыдущие действия:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction("com.example.ACTION_LOGOUT");
sendBroadcast(broadcastIntent);

Ответ 2

Попробуйте это,

Используйте startActivityForResult(intent,0) для вызова Activity 2 из Activity 1 и напишите следующий код в вашей Activity 1

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case 0:
            if (resultCode == RESULT_OK) {
                finish();
            }
        }
    }

Аналогичным образом выполните действия 2 и вызовите Activity 3, используя startActivityForResult.

Наконец, запустите Activity 3 перед вызовом Activity 4, вы должны вызвать только finish(). Если вы вызываете finish() в Activity 3, метод обратного вызова onActivityResult, записанный в предыдущем действии, будет выполнен, и он завершит сам.

Ответ 3

YourActivityName.this.finish();
                 ^^^^

попробуйте это, это не позволит пользователю вернуться к этой активности.

Ответ 4

вы можете переопределить метод onBackPressed() на 4-й странице, так что, когда пользователь нажимает клавишу "Назад", он будет вынужден перейти на главную страницу или что вам нужно.

 public void onBackPressed() {
        //code here, like calling back the main page of your app
    }

Скрываясь вокруг, я нашел этот вопрос, может быть, третий ответ может вам помочь:

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