내 앱은 사용자가 앱을 처음 실행할 때 가입 활동을 보여줍니다.
- ActivitySplashScreen (게임에 오신 것을 환영합니다, 계정에 가입 하시겠습니까?)
- ActivitySplashScreenSignUp (위,이 정보를 입력하십시오)
- ActivityGameMain (메인 게임 화면)
사용자가 각 화면에서 버튼을 클릭하면 활동이 순서대로 정확하게 실행됩니다.
사용자가 활동 # 2에서 # 3으로 이동하면 내역 스택에서 # 1 및 # 2를 완전히 지울 수 있습니까? 사용자가 # 3에 있고 뒤로 버튼을 누르면 스플래시 화면으로 돌아 가지 않고 홈 화면으로 이동합니다.
나는 작업 으로이 작업을 수행 할 수 있다고 생각합니다 (즉, # 3에서 새 작업을 시작하십시오). 그러나 더 간단한 방법이 있는지 확인하고 싶었습니다.
감사
답변
파일 의 관련 항목에서 android:noHistory
속성 을 로 설정하면 됩니다. 예를 들면 다음과 같습니다."true"
<activity>
AndroidManifest.xml
<activity
android:name=".AnyActivity"
android:noHistory="true" />
답변
전달을 사용하여 다음 활동을 시작하는 동안 활동 스택에서 이전 활동을 제거 할 수 있습니다. APIDemos에 이것의 예가 있지만 기본적으로 당신이하는 일은 call finish()
직후에 호출하는 것 startActivity()
입니다.
답변
예, Intent.FLAG_ACTIVITY_NO_HISTORY를 살펴보십시오 .
답변
이것은 이상적인 방법은 아닙니다. 누군가가 더 나은 방법을 가지고 있다면 그것을 구현하기를 고대 할 것입니다. 여기에 방법은 내가 이전 버전-11 SDK이 특정 작업을 수행.
명확한 시간에 떠나고 싶은 각 수업에서 다음을 수행해야합니다.
... interesting code stuff ...
Intent i = new Intent(MyActivityThatNeedsToGo.this, NextActivity.class);
startActivityForResult(i, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == R.string.unwind_stack_result_id) {
this.setResult(R.string.unwind_stack_result_id);
this.finish();
}
}
스택에서 팝 체인을 설정 해야하는 것은 시작하려는 경우 이것을 호출해야합니다.
NextActivity.this.setResult(R.string.unwind_stack_result_id);
NextActivity.this.finish();
그런 다음 활동은 스택에 없습니다!
사람들을 기억하십시오. 활동을 시작한 다음 정리를 시작할 수 있습니다. 실행은 단일 (ui) 스레드를 따르지 않습니다.
답변
API 11 이전에 작동하는 한 가지 방법은 ActivityGameMain
먼저 시작한 다음 onCreate
해당 활동에서 활동을 시작하는 것 ActivitySplashScreen
입니다. 은 ActivityGameMain
당신이 너무 빨리 시작에 대한 startActivity를 전화로 나타나지 않습니다.
그런 다음 Intent에서 다음 플래그를 설정하여 시작할 때 스택을 지울 수 있습니다ActivityGameMain
.
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
또한 이것을 ActivitySplashScreen에 추가해야합니다.
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
따라서 해당 활동을 다시 눌러도 귀하의 (으)로 돌아 가지 않습니다 ActivityGameMain
.
스플래시 화면이 다시 돌아 가지 않기를 원한다고 가정 noHistory
합니다 AndroidManifest.xml
. 그런 다음 대신 클래스에 goBackPressed
코드를 넣으십시오 ActivitySplashScreenSignUp
.
그러나 나는 이것을 깨는 몇 가지 방법을 발견했다. 알림 ActivitySplashScreenSignUp
이 표시 되는 동안 알림에서 다른 앱을 시작 하면 이전 기록이 재설정되지 않습니다.
이 문제를 해결하는 유일한 방법은 API 11입니다.
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
답변
이 방법을 사용합니다.
Intent i = new Intent(MyOldActivity.this, MyNewActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(i);
답변
나는 이것에 늦었다는 것을 알고 있습니다 (질문이 제기 된 지 2 년이 지났습니다). 그러나 뒤로 버튼 누름을 가로 채서 이것을 달성했습니다. 특정 활동을 확인하는 대신 카운트를보고 3보다 작 으면 단순히 앱을 뒤로 보냅니다 (앱을 일시 중지하고 시작하기 전에 실행중인 모든 항목으로 사용자를 반환). 소개 화면이 하나 밖에 없기 때문에 3 개 미만을 확인합니다. 또한 앱을 통해 사용자가 메뉴를 통해 홈 화면으로 돌아갈 수 있으므로 카운트를 확인하므로 스택에 소개 화면 이외의 활동이있는 경우 일반과 같은 다른 화면을 통해 백업 할 수 있습니다.
//We want the home screen to behave like the bottom of the activity stack so we do not return to the initial screen
//unless the application has been killed. Users can toggle the session mode with a menu item at all other times.
@Override
public void onBackPressed() {
//Check the activity stack and see if it's more than two deep (initial screen and home screen)
//If it's more than two deep, then let the app proccess the press
ActivityManager am = (ActivityManager)this.getSystemService(Activity.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(3); //3 because we have to give it something. This is an arbitrary number
int activityCount = tasks.get(0).numActivities;
if (activityCount < 3)
{
moveTaskToBack(true);
}
else
{
super.onBackPressed();
}
}