1

로그인 단편을 포함하는 활동 A와 홈 단편을 포함하는 활동 B가 있습니다. 로그인 요청 (Async)이 성공적으로 끝나면 로그인 단편에서 B를 시작해야합니다. 내가 로그인 조각 내부 콜백 리스너를했습니다 : getting exception "IllegalStateException: Can not perform this action after onSaveInstanceState" :상태 손실 관리

onSuccess(result) { 
    startActivity(B); 
} 

오늘이 좋은 버그를 만났다.

나는 적절하게 버그가 아니라고 생각합니다. 어쨌든 해결 방법을 모릅니다. This blog post은 비동기 콜백 메소드 내에서 트랜잭션을 피하도록 제안합니다. 그렇지만 어떻게됩니까? 최후의 수단으로 commitAllowingStateLoss()를 사용해야합니다 : Activity B 생성 메소드에서 Home Fragment 트랜잭션 내에서 사용해야합니까?

기본적으로 비동기식 콜백 후 다른 활동을 시작하려면 어떻게해야합니까?

답변

0

당신은 AsyncTask를에 onPostExecute (결과)를 사용한다 :

private class LoginTask extends AsyncTask<parameters,...> { 
... 
protected void onPostExecute(Long result) { 
     //if result successful start ActivityB 
    } 
} 

을 화재 Onpost AsyncTask를 완료 한 후. UI 스레드에서 실행되므로 문제를 해결할 수 있습니다. 주요 활동

넣어이 :

public void run(){ 
     //code you would normally have after task completes 
    } 

이 그런 다음으로 onSuccess에 넣고 :

mainactivity.runUIonthread() 
+0

불행하게도 내가 AsyncTask를 안드로이드 프레임 워크에서 제공 클래스,하지만 loopj 라이브러리를 사용하지 않는 : 그래서 조각 내 청취자로부터 콜백을 받았고 요청은 다른 클래스 안에 있습니다. onPostExecute 및 UI 스레드 실행을 시뮬레이트하는 방법은 무엇입니까? 많은 감사합니다. – Jumpa

+0

loopj에 대한 내 대답 편집, 작동하는지 알려주십시오. – Lukos