좋아, 나는 해결책을 찾았습니다.
이 코드는 MainActivity
으로 전달되고 이후에 LoginActivity
이 다시 스택에서 제거됩니다 (뒤로 버튼은 앱을 종료 함).
아무리 그래도 문제가 있습니다. 앱을 종료하면 Facebook
계정에서 앱을 삭제하고 다시 설치하면 MainActivity
(으)로 다시 전달되므로 다시 로그인하지 않아도됩니다. 앱을 닫고 다시 열면 LoginActivity
이 올바르게 표시됩니다.
이 시나리오를 디버깅하면 모든 것이 완벽하게 작동합니다. 이 문제를 어떻게 피할 수 있습니까?
public class LoginActivity extends Activity {
private boolean isResumed = false;
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
onSessionStateChange(session, state, exception);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
@Override
public void onResume() {
super.onResume();
isResumed = true;
Session session = Session.getActiveSession();
if (session != null && (session.isOpened() || session.isClosed())) {
onSessionStateChange(session, session.getState(), null);
}
uiHelper.onResume();
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
isResumed = false;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (isResumed) {
if (session != null && session.isOpened()) {
Intent intent = new Intent(LoginActivity.this,
MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}
}
}