我有一个应用程序,只要活动进入onPause状态,就会显示登录屏幕。通常,当屏幕方向改变时,活动进入onPause状态,因此我在某种程度上阻止了设备旋转时的登录屏幕。请参阅下面的代码,
protected void onPause() {
super.onPause();
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mDisplay = mWindowManager.getDefaultDisplay();
mOrientation = mDisplay.getRotation();
if(mOrientation == 1 || mOrientation == 2 || mOrientation == 3 || mOrientation == 0)
{
inApp = true;
}
if (!inApp) {
SavedState.setState(this, "HomeActivity");
Intent intent = new Intent(HomeActivity.this, LoginActivity.class);
startActivity(intent);
}
}
但问题是,当我按下主页按钮并返回应用程序时,登录屏幕没有显示,而是直接恢复到活动,因为mDisplay.getRotation()
读取屏幕当前方向并{{1条件总是变为真。
为了简单明了,我需要在用户按下主页按钮或切换到其他应用程序时显示登录屏幕,而不是在屏幕旋转时显示。
非常感谢任何建议或示例。谢谢!
答案 0 :(得分:0)
这是应该有用的东西 - 你可能需要充实它......
class MyActivity... {
private boolean loggedIn = false;
@Override
protected void onSaveInstanceState( Bundle data ) {
super.onSaveInstanceState( data );
data.putBoolean( "loggedIn", loggedIn );
}
@Override
protected void onUserLeaveHint() {
isLoggedIn = false; // user pressed home
}
@Override
protected void onCreate( Bundle data ) {
isLoggedIn = data.getBoolean( "loggedIn", false );
....
}
@Override
protected void onResume() {
if( !isLoggedIn ) {
/// Log in...
}
}
此模式使用首选方法使用/恢复活动状态,作为奖励,如果按下主页按钮(或用户活动决定移动到其他应用程序),则注销用户。请注意,电话呼叫不应该在此处记录用户 - 这在大多数情况下是所需的行为。
确保删除其他人推荐的android:configChanges
垃圾。
答案 1 :(得分:-2)
默认情况下,Android实际上会在轮换时销毁并重新启动您的活动。这会导致调用onPause()
,onStop()
,onDestroy()
,onCreate()
,onStart()
,onResume()
。避免这样的问题的最好方法是告诉Android不要这样做。在清单中将android:configChange="orientation"
添加到您的活动中。它将防止破坏,并在旋转时调用函数。几乎在所有情况下,它仍会正确地重绘您的屏幕。