我有一个应用程序,当有人退出其主要活动时需要调用完成(所以我不希望它被暂停),即使按下主页活动也必须完成,为了处理这个目前我只需调用finish()
我的onPause()
方法,因为一切用片段完成它工作得很好并且没有稳定性问题。
我唯一的问题是我无法处理方向更改,因为onPause()
之前被调用onConfigurationChanged()
(允许我在发生旋转时禁用此行为)。
我可以创建一个服务来处理这个问题,但它的方式很复杂。
任何想法?
我有一个应用程序,当有人退出其主要活动时需要调用完成(所以我不希望它被暂停),即使按下主页活动也必须完成,为了处理这个目前我只需调用finish()
我的onPause()
方法,因为一切用片段完成它工作得很好并且没有稳定性问题。
我唯一的问题是我无法处理方向更改,因为onPause()
之前被调用onConfigurationChanged()
(允许我在发生旋转时禁用此行为)。
我可以创建一个服务来处理这个问题,但它的方式很复杂。
任何想法?
您可以使用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();
}
它很简单:
@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();
}
您可以监听方向变化,并在更改事件上存储一个关于它的布尔值,例如
boolean orientationChanging;
在方向发生变化时使这一点为真,然后在你的 onPause 中变为假:
@Override
protected void onPause() {
if(!orientationChanging){
finish();
}
}
从您的问题来看,您似乎只有一个活动,在这种情况下,您应该在清单中设置一个标志。在您的 MainActivity 清单中添加
android:clearTaskOnLaunch="true"