Activities 스 택 꼭대기 의 Activity 이름 을 어떻게 얻 습 니까?

3381 단어
안 드 로 이 드 의 미 션 등 은 스 택 을 통 해 관리 되 는 것 으로 알려 져 있 으 며, Activities 의 관리 도 예 외 는 아니다.창고 의 이런 데이터 구 조 는 모두 가 더 이상 익숙 할 수 없다.안 드 로 이 드 가 현재 Activity 에서 이전 Activity 로 돌아 가 거나 다시 시작 할 수 있 도록 하 는 선진 적 인 기능 이 있 습 니 다. (비고: 시스템 자원 이 부족 할 때 시스템 은 이전 Activity 가 자원 을 점용 하 는 것 을 방출 하기 때문에 현재 Activity 에서 이전 Activity 로 돌아 갈 때 이전 Activity 가 다시 생 성 됩 니 다)
쉽게 말 하면 이전의 Activity 로 돌아 가 는 본질은 현재 의 Activity 를 삭제 하고 이전의 Activity 를 Activities 스 택 의 스 택 지붕 으로 만 드 는 것 이다.이렇게 말 할 수 있 습 니 다. 현재 실행 중인 활동 의 Activity 는 Activities 스 택 꼭대기 에 있 는 Activity 입 니 다.
실제 개발 에서 우 리 는 가끔 현재 Activities 스 택 꼭대기 에 있 는 Activity 를 얻어 서 일부 기능 을 실현 해 야 한다. 예 를 들 어 Debug 를 할 때 Activity 가 돌아 오 는 상태 가 정확 한 지 모니터링 해 야 한다.예 를 들 어 필 자 는 개발 과정 에서 개발 체제 의 원인 으로 인해 특정한 Activity UI 에서 홈 버튼 을 누 른 다음 에 다시 응용 에 들 어 갈 때 상태 가 잘못 되 었 다.필 자 는 처음부터 끝까지 원인 을 확인 하지 못 하고 다시 응용 프로그램 에 들 어 갈 때 현재 Activities 스 택 의 스 택 꼭대기 에 있 는 Activity 를 감시 하여 개발 체제 로 인해 Activities 스 택 에 오류 가 발생 한 것 으로 결론 을 내 렸 다. 즉, 스 택 꼭대기 Activity 오류 로 인해 홈 에서 다시 응용 프로그램 에 들 어간 후에 Android resume 에 잘못된 Activity 가 생 겼 다.
이상 은 한 무더기 의 수 다 를 떨 었 으 니 독자 가 흥미 가 없다 면 뛰 어 넘 을 수 있다.현재 스 택 꼭대기 에 있 는 Activity 를 어떻게 얻 는 지 소개 하 겠 습 니 다.
전체적인 절 차 는:
  • 현재 실행 환경 (context) 의 Activity 관리 자 를 가 져 옵 니 다.
  • Activity 관리 자 를 통 해 현재 작업 스 택 정 보 를 얻 을 수 있 습 니 다.
  • 퀘 스 트 스 택 에서 스 택 꼭대기 의 Activity 이름 을 얻 습 니 다.

  • 구체 적 인 독 자 는 아래 의 코드 와 안 드 로 이 드 도움말 문 서 를 참조 할 수 있다.
    코드 예:
    String getTopActivity(Activity context)
    
    {
    
    ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE) ;
    
    List<RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(1) ;
    
    
    if(runningTaskInfos != null)
    
    return (runningTaskInfos.get(0).topActivity).toString() ;
    
    else
    
    return null ;
    
    }
    
           AndroidManifest.xml     :
    
    <uses-permission android:name = “android.permission.GET_TASKS”/>
    
    
    
    
    
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    RunningTaskInfo info = manager.getRunningTasks(1).get(0); 
    String shortClassName = info.topActivity.getShortClassName(); //   
    String className = info.topActivity.getClassName(); //     
    String packageName = info.topActivity.getPackageName(); //  
    
    

    Author : Aoyousatuo Zhao
    http://blog.sina.com.cn/aoyousatuo

    좋은 웹페이지 즐겨찾기