所以我正在构建一个应用程序,它有一个带有 facebook 登录按钮的启动/登录屏幕。用户登录后,返回一个带有信息的用户对象,我想在数据库中插入一些数据(代码中还没有,但没关系),然后打开MainActivity
活动。
发生的情况是,在第一次启动时,一切正常:
如果用户已经登录(=存在活动会话),则MainActivity
启动活动。
如果用户未登录,则会显示一个登录按钮,要求用户登录,并MainActivity
在成功时再次打开活动。
如果用户从 中点击后退按钮MainActivity
,则会显示白屏,并保持这种状态。如果再次按下返回按钮,应用程序将关闭,当应用程序恢复时(例如从“最近的应用程序”窗口),白屏会再显示 1-2 秒,然后进入MainActivity
。
我认为它的发生是因为它试图回到它,SplashActivity
但因为我finish()
它,它不能......虽然,我不太确定,因为我尝试使用Intent.FLAG_ACTIVITY_CLEAR_TOP
和Intent.FLAG_ACTIVITY_NEW_TASK
......
什么可能导致这种行为?我该如何解决?
额外信息:
-SplashActivity
设置为在应用intent-filter
程序清单中使用的应用程序启动器启动:<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
- 在 HTC Sensation XE /w Android 4.1 上测试
这是一些代码(SplashActivity
):
public class SplashActivity extends Activity {
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback =
new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);
}
};
private ArrayList<String> permissions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
permissions = new ArrayList<String>();
permissions.add("email");
permissions.add("user_birthday");
Session session = Session.getActiveSession();
if(session != null && session.isOpened()) {
if(!session.getPermissions().contains(permissions)) {
session.requestNewReadPermissions(new Session.NewPermissionsRequest(SplashActivity.this, permissions));
}
} else {
LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
authButton.setReadPermissions(permissions);
}
}
@Override
protected void onResume() {
super.onResume();
uiHelper.onResume();
}
@Override
protected void onPause() {
super.onPause();
uiHelper.onPause();
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if(session != null && state.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
//no code here yet
}
}
});
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
}