我有一个应用程序,当有人退出其主要活动时(我不希望它被[[paused),它需要调用完成,即使必须按家庭活动也要完成),以处理此问题,我现在只是调用我的finish()
方法中的onPause()
,因为所有操作都是用片段完成的,所以效果很好,并且没有稳定性问题。
onPause()
之前调用了onConfigurationChanged()
,因此我无法处理方向变化(允许我在发生旋转时禁用
此行为)。我可以创建一个处理该问题的方法,但是将其复杂化。有什么想法吗?
@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(); }
@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(); }
android:clearTaskOnLaunch="true"
boolean orientationChanging;
当方向改变时,使此为真,在onPause之后则为假:
@Override protected void onPause() { if(!orientationChanging){ finish(); } }