4

我有一个应用程序,当有人退出其主要活动时需要调用完成(所以我不希望它被暂停),即使按下主页活动也必须完成,为了处理这个目前我只需调用finish()我的onPause()方法,因为一切用片段完成它工作得很好并且没有稳定性问题。

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

我可以创建一个服务来处理这个问题,但它的方式很复杂。

任何想法?

4

4 回答 4

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();
}
于 2013-04-29T09:03:31.373 回答
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();
    }
于 2013-04-29T09:17:52.843 回答
0

您可以监听方向变化,并在更改事件上存储一个关于它的布尔值,例如

boolean orientationChanging;

在方向发生变化时使这一点为真,然后在你的 onPause 中变为假:

@Override
protected void onPause() {

    if(!orientationChanging){
                finish();
            }
}
于 2013-04-29T08:51:15.973 回答
0

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

android:clearTaskOnLaunch="true"
于 2013-04-29T08:45:59.630 回答