조각 및 활동에 대한 시작 활성 결과의 동작 이해
원본 활동과 대상 활동 간의 양방향 통신이 허용됩니다. 그 흐름은 아래 다이어그램과 같습니다.
아래 흐름에서 소스 활동에서 대상 활동으로의 온 액티비티의 흐름을 쉽게 이해할 수 있습니다
소스 액티비티 호출,시작 액티비티결과를 요청 코드와 함께 인텐트로 보내면 됩니다.그런 다음 인텐트에 명시된 대로 활동을 엽니다.
대상 활동이 작업을 완료하면 호출자 활동으로 돌아갑니다.
결과 코드를 사용하여 결과를 다시 보낼 수 있습니다.결과 코드와 의도
여기에 몇 가지 메모가 있습니다.
결과 코드는 대상 활동에 의해 사용되어 소스 활동에 상태(예:확인,취소 등)에 플래그를 지정합니다.
요청 코드는 소스 활동에서 호출을 반환하는 대상 활동을 파악하는 데 사용됩니다.
대상 활동에 요청 코드가 표시되지 않는 것을 볼 수 있습니다.
문서화되지 않은 시작 활성 결과 조각 흐름
조각에서,우리는 또한 호출 할 시작 활성 결과 함수 및 오버라이드 할 활성 결과 함수를 가지고있다.
이것은 몇 가지 질문을 제기합니다… 이 작업을 수행하는 방법은 다음과 같습니다. 그들은 어떻게 관련이 있습니까?
짧은 대답은 비슷하지만 미묘하게 다르다는 것입니다. 혼란과 버그의 빈번한 원인. 그래서 유사성과 차이점을 이해하는 것이 중요합니다.
단편 흐름이 도시되어 있다.
아래 다이어그램은 모든 것이 어떻게 함께 작동하는지 명확하게 보여줍니다. 활동의 시작 활동성 결과 및 활동성 결과 흐름과의 차이점은 빨간색으로 표시됩니다.
그것에 대해 더 자세히 살펴 보겠습니다.
조각의 시작 활성 결과(참고:활동이 아님?.대상 활동의 생성은 동일합니다. 그러나 차이점은 활성 상태입니다.결과.
startActivityForResult()
fragment
에서 처리해야합니다.onActivityForResult()
getActivity().startActivityForResult()
activity
의onActivityForResult()
에서 처리해야fragment
에 있고fragment
에서 결과를 처리하려면onActivityForResult()
을 사용합니다. 이 코드에는 원래 요청 코드가 추가됩니다.
피-값 1 에서 시작 하 고 각 활성화에 대 한 증가 결과 동일한 대상 조각에서 호출 됩니다. (다른 대상 조각이 호출되면 피-값이 재설정됩니다).이 예제에서는 요청 코드를 반환하는 방법에 대해 설명합니다. 두 번째 시간 반환 요청 코드가 될 것입니다.
소스 활동의 활동 결과로 돌아 오면 슈퍼라고 부를 것으로 예상됩니다.이 메서드는 다음 매개 변수를 사용하여 실행될 수 있습니다.이 메서드는 다음 매개 변수를 사용하여 실행될 수 있습니다. 피 소스 조각이 저장되는 배열의 인덱스입니다. 예를 들어,요청 코드는 다음과 같습니다.>> 16 = 2)
이제 아래 9 단계에서 사용되는 소스 조각에 액세스할 수 있습니다.이 코드를 사용하면 요청 코드(예:요청 코드)에서 원래 요청 코드(예:요청 코드)로 돌아갈 수 있습니다. 이제 소스 조각이 만든 원래 요청 코드를 가져오므로 원본 요청 코드를 사용하여 소스 조각의 온활성 결과를 호출할 수 있습니다.
알고 싶은 몇 가지 기본 포인트.
ㅏ.활동의 시작 활성 결과 결과와는 다른 조각의 시작 활성 결과
조각에서activity?.startActivityForResult(...)
을 호출하면 조각의onActivityResult
는 자동으로 호출되지 않습니다.우리가 활동 결과를 재정의한다면,우리가 슈퍼를 가지고 있는지 확인하십시오.소스 활동의onActivityResult
를 재정의하지만super.onActivityResult
를 잊어 버린 경우 조각의onActivityResult
가 호출되지 않습니다.
다.활동의 활동 결과에서 볼 수있는 요청 코드는 이유 때문에
에서 제공 한 조각과 다릅니다. 이 경우 코드를 디버깅 할 때 개발자에게 혼란을 야기 할 수 있습니다.
라.활동이 상태에서 복원 될 때(즉,상태 즉시!=널),그것의 조각을 다시 피해야한다.
onActivityResult
가 호출되면 원본 조각을 검색하려고 했습니다. 이것은 또한 살해 된 상태(예:활동을 유지하지 않음을 사용하여 에뮬레이트 됨)에서 복원 된 활동에 대해서도 수행됩니다.
따라서 개발자가 조각을 만들 때마다 다시 만들면(복원 된 상태인지 여부에 관계없이)복원 된 원래 조각이 파괴되고 호출자의onActivityResult
는 조각이 신비하게 호출되지 않습니다.
이 식별 된 버그에 매우 어렵 기 때문에(이 모든 시간을 발생하고,트리거하기 위해 더 복잡한 흐름을 필요로하지 않기 때문에)이것은,심지어 현장에서 출시 된 많은 숙련 된 개발자 및 응용 프로그램에 대한 함정이다.
읽어 주셔서 감사합니다…