태그 보관물: lifecycle

lifecycle

활동이 애플리케이션의 활동 스택에서 마지막 활동인지 확인하는 방법은 무엇입니까? 화면으로 돌아갈 것인지 알고 싶습니다.

사용자가 현재 활동을 종료하면 홈 화면으로 돌아갈 것인지 알고 싶습니다.



답변

업데이트 (2015 년 7 월) :

이후 getRunningTasks () API (21)로부터 팔로우하는 것이 좋습니다, 사용되지 않는 얻을 raukodraug의 대답 이나 에드 Burnette 하나를 (내가 두 번째 선호).

ActivityManager를
사용하여 현재 작업과 스택을 확인할 수 있습니다 .

따라서 활동이 마지막 활동인지 확인하려면 :

  • 매니페스트에서 android.permission.GET_TASKS 권한을 요청합니다.
  • 다음 코드를 사용하십시오.

    ActivityManager mngr = (ActivityManager) getSystemService( ACTIVITY_SERVICE );
    
    List<ActivityManager.RunningTaskInfo> taskList = mngr.getRunningTasks(10);
    
    if(taskList.get(0).numActivities == 1 &&
       taskList.get(0).topActivity.getClassName().equals(this.getClass().getName())) {
        Log.i(TAG, "This is last activity in the stack");
    }

위의 코드는 단일 작업이있는 경우에만 유효합니다. 애플리케이션에 대한 작업 수가 존재할 가능성이있는 경우-다른 taskList 요소 를 확인해야합니다 . 작업 작업 및 백 스택 에 대해 자세히 알아보기


답변

비슷한 질문을 가진 사람들을 위해 여기 에 @ H9kDroid 의 댓글을 베스트 답변으로 게시 하겠습니다.

isTaskRoot () 를 사용 하여 활동이 작업의 루트인지 여부를 알 수 있습니다 .

이게 도움이 되길 바란다


답변

이것이 새로운 초보자에게 도움이되기를 바랍니다. 위의 답변을 기반으로 잘 작동하며 코드 스 니펫을 공유하여 구현하기 쉽습니다.

솔루션 : 내가 사용 isTaskRoot()반환하는 진정한 경우 현재의 활동 만 스택에서 활동 한다면 나는 또한의 경우를 처리 이외의 내가 대신 새로운 개방의 스택의 마지막 활동 스택 이동에서 일부 활동이 사용자 정의 하나.

당신의 활동에서

   @Override
    public void onBackPressed() {

        if(isTaskRoot()){
            startActivity(new Intent(currentActivityName.this,ActivityNameYouWantToOpen.class));
            // using finish() is optional, use it if you do not want to keep currentActivity in stack
            finish();
        }else{
            super.onBackPressed();
        }

    }


답변

이에 대한 가장 쉬운 해결책이
있습니다. 활동에서 isTaskRoot () 를 사용할 수 있습니다.


답변

이것을 달성하는 방법이있을 수 있지만 (다른 답변 참조) 그렇게하지 말 것을 제안합니다. 일반 Android 애플리케이션은 홈 화면이 표시 될 것인지 여부를 알 필요가 없습니다.

데이터를 저장하려는 경우 데이터 저장 코드를 onPause () 메서드에 넣으십시오. 사용자에게 기존 애플리케이션에 대한 마음을 바꿀 수있는 방법을 제공하려는 경우 Back 키 및 onBackPressed () 메서드에 대한 키 위 / 아래를 가로 채서 “Are you sure?”를 표시 할 수 있습니다. 신속한.


답변

이를 추적하는 한 가지 방법은 새 활동을 시작할 때 마커를 포함하고 마커가 있는지 확인하는 것입니다.

새 활동을 시작할 때마다 마커를 삽입하십시오.

newIntent=new Intent(this, NextOne.class);
newIntent.putExtra(this.getPackageName()+"myself", 0);
startActivity(newIntent);

그런 다음 다음과 같이 확인할 수 있습니다.

boolean islast=!getIntent().hasExtra(this.getPackageName()+"myself")


답변

사용하는 sandrstar 솔루션의 문제점은 다음과 같습니다 ActivityManager. 이런 방식으로 작업을 가져 오려면 권한이 필요합니다. 더 나은 방법을 찾았습니다.

getIntent().hasCategory(Intent.CATEGORY_LAUNCHER)

Activity다른 활동을하지해야하는 동안 스택 하단은에 allways 기본적으로이 범주를 받아야합니다.
그러나 이것이 일부 장치에서 실패하더라도 다음을 시작하는 동안 설정할 수 있습니다 Activity.

Intent intent = new Intent(startingActivity, SomeActivityClass.class);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
activity.startActivity(intent);