我有一个应用程序需要在某人退出其主要活动时调用完成(因此我不希望它暂停),即使按下home活动也必须完成,以处理此问题目前我只是在我的finish()
方法中调用onPause()
,因为所有内容都是使用片段完成的,因此效果非常好,并且不会出现稳定性问题。
我唯一的问题是我无法处理方向更改,因为在onPause()
之前调用onConfigurationChanged()
(允许我在旋转发生时禁用此行为)。
我可以创建一个处理这个问题的服务,但是它可以复杂化。
有什么想法吗?
答案 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();
}
}