몇 년 전, 내 을 내 onActivityResult()
콜백에 투입하려고 할 때 내 앱 중 하나에서 문제가 발생했습니다. 주위에 인터넷 검색, 내가 onActivityResult()
가 호출되는 시점에서onActivityResult() 안에 FragmentTransaction을 저지르는 것이 안전합니까?
말 this question and answer을 발견, 활동/조각의 상태는 아직 회복되지 않았을 수 있습니다, 따라서이 기간 동안 일어날 모든 거래는 결과로 손실됩니다 .
나는 내 애플 리케이션에 대한 동일한 답변에서 권장되는 솔루션을 채택하고 인생은 좋았다. 그러나 최근의 실험에 따르면 상황이 바뀌 었음을 알 수 있습니다. 은 onActivityResult()
에서 FragmentTransaction
을 위탁하는 것이 안전합니다.
참고 :
The documentation for (support v4)
FragmentManager.beginTransaction()
이 같은 트랜잭션에 대한 안전 창을 정의하는 단편 트랜잭션 만 만들 수 있습니다/이전 상태를 절약 활동에 최선을 다하고 있습니다. 당신이 후FragmentActivity.onSaveInstanceState()
(이전FragmentActivity.onStart
또는FragmentActivity.onResume()
를 수행하면, 오류를 얻을 것이다으로 트랜잭션을 커밋하려고하면.
이 the documentation for onActivityResult()
읽기, 나는
당신은
onResume()
직전에이 전화를받을 것입니다 참조 귀하의 활동이 다시 시작될 때
이렇게하면 onActivityResult()
에서 다음 트랜잭션을 실행하는 것이 안전해야합니다. onStart()
이 이미 호출되어 안전 창이 안쪽에 있습니다.
나는 이것을 시험해보기 위해 응용 프로그램을 만들었고, 내가 만든 대화 상자 조각을 성공적으로보고 있습니다. onActivityResult()
. 같은 앱에서 활동 라이프 사이클 콜백을 기록하여 순서를 확인할 수 있었고, onStart()
, onRestoreInstanceState()
, 그리고 onActivityResult()
을 매번 볼 수있었습니다.
나는 뭔가를 놓친가요? 또는 프레임 워크가 변경되어 onActivityResult()
이 프래그먼트 트랜잭션의 안전한 장소로 보장됩니까? 이 동작은 API 수준에 따라 다릅니다.
문서를 읽는 것처럼 보이는 another question and answer이 있는데, 둘 다 1 년 이상 된 것이므로 특별히 안전한 장소로는 onActivityResult()
을 참조하십시오.
http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html – elmorabea
@elmorabea에서 살펴보기 해당 블로그 게시물은 내가 처음 발견했을 때 발견 한 자료 중 하나입니다. 이 문제. 그러나 아래 azizbekian의 답변에 나와 있듯이 더 이상 FragmentTransactions를 실행하는 안전한 창에 대한 정확한 설명이 아닌 것 같습니다. –