2013-12-07 1 views
0

처음에는 로그인 단편을 표시하는 LoginActivity이 있습니다. 이제 사용자가 데이터를 채우고 로그인 버튼을 누르면 자격 증명이 IntentService으로 전송됩니다. 서비스가 서버에 도달하기 전에 LoginActivity에 로컬 브로드 캐스팅 인 텐트를 보내고 Loading Fragment (로그인 단편 바꾸기)를 표시합니다. 로그인 프로세스가 성공적으로 종료되면 에 브로드 캐스트 인 텐트를 보내고 MainActivity을 시작하고 실패하면 LoginActivity에 브로드 캐스트 인 텐트를 보내 오류 조각을 표시합니다.활동과 서비스 간의 의사 소통을 통한 단편 변경 (로그인)

지금 나는 올바른 방법대로하고 있습니까? 이 오류가 발생하면 어떨까요?

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 
    at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1341) 
    at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1352) 
    at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) 
    at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 

? 이 오류가 발생했습니다. 이제는 어떻게 Login Activity에서 Fragment를 변경하는 onReceive() 메소드에서 FragmentTransaction을 처리 할 수 ​​있습니까?

ActivityIntentService을 사용하여 로그인을 처리하는 데 더 좋은 아키텍처가 있습니까?

답변

0

commit() 대신 commitAllowingStateLoss()를 사용하십시오.

편집 됨 :

문제는 당신이 onSavedInstanceState 방법 후 커밋 호출 할 것입니다. 활동이 앞 (onPause()에서)에 없을 때 수신자의 등록을 취소해야합니다.이 댓글을 확인하십시오. stackoverflow.com/a/18306939/1333170

+0

대답은 내 마지막 옵션이 될 것입니다 .. – user4o01

+0

왜 Btw IntentService를 사용하여 앱에 로그인 하시겠습니까? IntentService는 장기 실행 작업을 위해 설계되었습니다. AsyncTask를 사용하는 것이 낫지 않습니까? – malinjir

관련 문제