在onPause()内部调用finish(),但在方向更改时调用

时间:2013-04-29 08:26:16

标签: android android-activity orientation onpause

我有一个应用程序需要在某人退出其主要活动时调用完成(因此我不希望它暂停),即使按下home活​​动也必须完成,以处理此问题目前我只是在我的finish()方法中调用onPause(),因为所有内容都是使用片段完成的,因此效果非常好,并且不会出现稳定性问题。

我唯一的问题是我无法处理方向更改,因为在onPause()之前调用onConfigurationChanged()(允许我在旋转发生时禁用此行为)。

我可以创建一个处理这个问题的服务,但是它可以复杂化。

有什么想法吗?

4 个答案:

答案 0 :(得分:7)

您可以使用onWindowFocusChanged事件而不是onPause。方向改变时不调用此功能。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.d(TAG, "FOCUS = " + hasFocus);
    if (!hasFocus) finish();
}

但请注意:当活动仍然可见时(例如onPause()),会调用此事件,您应该这样做 如果要在活动完全不可见时完成活动,请使用onStop:

private boolean isInFocus = false;

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.d(TAG, "FOCUS = " + hasFocus);
    isInFocus = hasFocus;
}

@Override
public void onStop() {
    super.onStop();
    if (!isInFocus) finish();
}

答案 1 :(得分:3)

简单就是这样做:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        display = ((WindowManager) getSystemService(WINDOW_SERVICE))
                .getDefaultDisplay();
        orientation = display.getOrientation();

    }

@Override
    protected void onPause() {
        // TODO Auto-generated method stub

        int orientation_ = display.getOrientation();
        if (orientation_ != orientation) {
            finish();
        }
        Log.e("hello=---->", "onPause");
        super.onPause();
    }

答案 2 :(得分:0)

从您的问题来看,您似乎只有一个活动,在这种情况下,您应该在清单中设置一个标志。在MainActivity清单中添加

android:clearTaskOnLaunch="true"

答案 3 :(得分:0)

您可以侦听方向更改,并在更改事件存储中有关于它的布尔值,例如

boolean orientationChanging;

在方向改变时使其成为真,之后为假,而不是在onPause:

@Override
protected void onPause() {

    if(!orientationChanging){
                finish();
            }
}