안드로이드 앱의 첫 설치가 완료된 후 설치 인터페이스에서 바로'열기'앱을 누르고 홈 키를 누르면 데스크톱으로 돌아가 앱에 다시 들어가 launcher activity를 반복하는 문제 해결

문제 설명
제목에서 말한 바와 같이 최근에 실례화된 launcher activity가 중복되어 비참하게 되었는데, 이 문제는 어떤 표현이 있습니까?다음과 같습니다.
  • 패키지 설치창에 앱을 설치한 후 바로 앱을 켜고Activity1, 이 activity를 통해 startActivity(intent) 방법으로 Activity를 엽니다2.
  • 그리고 홈 키를 누르면 데스크톱으로 돌아가고 데스크톱에서 앱 아이콘을 누르면 Activity2, 실제로는 launcher Activity1 .
  • 하지만 아직 끝나지 않았습니다. 이때 백 리턴 버튼을 누르면 이전에 열었던Activity로 되돌아갑니다2, 다시 누르면 launcher**Activity1**. 즉 시스템이 Activity를 반복적으로 실례화한1.
  • 앱에서 로그아웃한 후 데스크톱 아이콘을 다시 클릭하여 들어갔습니다. 반복 테스트를 했지만 이 문제가 발생하지 않았습니다.그러니까 이 문제(bug?)작업 단계 (1) 이후에만 나타납니다.

  • 2. 문제의 원인은 Android Manifest라는 파일을 먼저 보면 쉽게 알 수 있지만 App 입구Activity라면 반드시
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    intent-filter>
    

    이 몇 줄의 코드.여기 도대체 무슨 꿍꿍이가 있는 거야?사실 이것은 데스크톱과 약속한 시작 차단 필터입니다.데스크톱에서 우리가 백엔드에 있는 앱 아이콘을 다시 눌렀을 때 이 백엔드 작업을 다시 시작하지 않고 백엔드 작업으로 옮겨야 한다는 뚜렷한 수요가 있기 때문이다.
    그러나 패키지 설치에서 앱을 직접 여는 시작 방식과 앱의 시작 방식이 일치하지 않아 데스크톱 아이콘을 눌렀을 때 백엔드 작업이 없다고 판단되어 하나의 인터페이스를 시작했기 때문이다.
    3. 해결 방법
    App 첫 번째 부팅 인터페이스에서 슈퍼.onCreate(...) 방법 뒤에 코드를 삽입하려면 다음과 같이 하십시오.
         if(!this.isTaskRoot()) { 
         //   Activity         Activity,“ ”               
         //      launcher Activity  ,      return 
                Intent mainIntent=getIntent(); 
                String action=mainIntent.getAction();
                if(mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER) 
                && action.equals(Intent.ACTION_MAIN)) {
                    finish();
                    //finish()               ,   logCat  , return     exception
                    return;
                }
            }

    구글
    https://code.google.com/p/android/issues/detail?id=14262 https://code.google.com/p/android/issues/detail?id=2373#c40

    좋은 웹페이지 즐겨찾기