如何区分方向更改和离开应用程序android

时间:2012-03-08 16:09:10

标签: android lifecycle

据我所知,当屏幕方向发生变化时,会调用当前活动onDestroy(),然后调用onCreate()来有效地重新创建活动。 我需要知道如何以编程方式判断应用程序是否已退出,或者是否只是更改了方向。

一个方法是让前一个活动在调用onResume()方法时通知我,这会让我知道用户按下了后退按钮并且方向没有被更改。

P.S。我正在寻找比听取后面的硬件按钮点击更优雅的解决方案。

以下是我想做的事情:

我有两个标签,当第一次输入活动或用户离开活动并且现在正在输入活动时,会根据某些标准显示某个标签。

当方向改变时,我需要保持在同一个标​​签上。

4 个答案:

答案 0 :(得分:90)

使用活动的isFinishing()方法。

@Override
  protected void onDestroy() {
    super.onDestroy();
    if (isFinishing()) {
      // do stuff
    } else { 
      //It's an orientation change.
    }
  }

答案 1 :(得分:20)

您可以使用isChangingConfigurations()阅读documentation

  

检查此活动是否正在进行中   销毁以便使用新配置重新创建。这是   经常在onStop()中用来确定状态是否需要   清理或将被传递到活动的下一个实例   通过onRetainNonConfigurationInstance()。

     

返回如果要拆除活动以便重新创建   使用新配置,返回true; else返回false

以简单的方式解释

isChangingConfigurations()

是一种方法,用于检查活动是否会被销毁以便再次重新创建(由于方向改变)

  

如何使用它?

如果你使用api> = 11那么没问题,但如果你使用api< 11然后我们必须处理这个方法手册我做了一个名为 IsconfigChange的布尔变量

private boolean IsconfigChange ;
...

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IsconfigChange = true ;

}


    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override
    public boolean isChangingConfigurations() {
        if(android.os.Build.VERSION.SDK_INT >= 11){
            Log.i("DEBUG", "Orientation changed api >= 11 ");
            return super.isChangingConfigurations();    
        }else {
            Log.i("DEBUG", "Orientation changed api < 11 ");
            return IsconfigChange; 
        }
    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB) 
    @Override
    protected void onStop() {
        super.onStop();
        if(isChangingConfigurations()){
            Log.i("DEBUG", "isChangingConfirgurations OnStop Called");
        }  else{
            Log.i("DEBUG", "OnStop Called");
        }
    }

Summery

您可以使用isChangingConfigurations中的onStop来检查应用是否会被销毁或者方向发生变化。

或者您可以使用isFinishing检查我的回答here

答案 2 :(得分:3)

for API lvl&gt; = 11 Activity有一个isChangingConfigurations()方法

答案 3 :(得分:1)

您可以在onDestroy回调中获取Activity.getChangingConfigurations()方法的值。这将返回ORIENTATION_PORTRAIT之类的结果,您可以根据current orientation检查结果。

请注意,活动结束和方向更改不是此处要考虑的唯一条件:如何返回主屏幕,来电和其他应用程序窃取焦点,以及所有其他当您的Activity不再位于堆栈前面时的场景?

大多数时候你不需要这样做。如果您正在尝试修复某些活动状态问题(通常在旋转屏幕时显示为NullPointerException) 通过捕获定向事件;查看Android Activity生命周期,确保您不仅仅是试图修复设计缺陷。如果您不确定,请在本网站上发布原始问题。