在onPause()内调用finish(),但方向改变时则不发生

问题描述 投票:4回答:4

我有一个应用程序,当有人退出其主要活动时(我不希望它被[[paused),它需要调用完成,即使必须按家庭活动也要完成),以处理此问题,我现在只是调用我的finish()方法中的onPause(),因为所有操作都是用片段完成的,所以效果很好,并且没有稳定性问题。

我唯一的问题是,由于在onPause()之前调用了onConfigurationChanged(),因此我无法处理方向变化(允许我在发生旋转时

禁用

此行为)。我可以创建一个处理该问题的方法,但是将其复杂化。

有什么想法吗?

android android-activity orientation onpause
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(); }


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(); }

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

android:clearTaskOnLaunch="true"


0
投票
您可以侦听方向变化,并在change事件上存储有关它的布尔值,例如

boolean orientationChanging;

当方向改变时,使此为真,在onPause之后则为假:

@Override protected void onPause() { if(!orientationChanging){ finish(); } }

© www.soinside.com 2019 - 2024. All rights reserved.