如何区分方向变化和离开应用程序的android

我明白,当屏幕的方向发生变化时,会调用当前的onDestroy()活动,然后调用onCreate()来有效地重新创build活动。 我需要知道如何以编程方式确定应用程序是否正在退出,或者只是方向正在改变。

一种方法是在上一个活动的onResume()方法被调用时通知我,这会让我知道用户已经按下了后退button,方向没有改变。

附言:我正在寻找一个解决scheme比听后面的硬件button点击更优雅。

这是我想要做的:

我有两个选项卡,第一次input活动或用户已经离开活动并且正在input活动时,会根据某些标准显示某个选项卡。

当方向改变时,我需要留在同一个选项卡上。

使用Activity的isFinishing()方法。

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

你可以使用isChangingConfigurations()从文档中读取

检查此活动是否正在被销毁,以便用新configuration重新创build。 这通常用于onStop()以确定状态是否需要清理,或者通过onRetainNonConfigurationInstance()传递给下一个活动实例。

返回如果活动正在被拆除以便用新configuration重新创build,则返回true; 否则返回false

以简单的方式用例子来解释

isChangingConfigurations()

是用来检查活动是否会被重新创build的方法(由于方向的改变)

如何使用它 ?

如果你使用api> = 11那么没问题,但是如果你使用api <11那么我们必须处理这个方法手册我把布尔variables叫做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"); } } 

综述

您可以在onStop使用isChangingConfigurations来检查应用程序停止销毁或由于方向改变。

或者你可以使用isFinishing 在这里检查我的答案

对于API lvl> = 11 Activity有一个isChangingConfigurations()方法

你可以在你的onDestroycallback中获取Activity.getChangingConfigurations()方法的值。 这将返回一个结果,如ORIENTATION_PORTRAIT ,你可以检查你当前的方向 。

请注意,活动结束和方向更改不是这里唯一要考虑的条件:如果您的活动不在前面,那么返回到主屏幕,拨入电话和其他应用程序以及其他应用的堆栈?

大多数时候你不需要这样做。 如果您尝试通过捕获方向事件来解决某个活动状态问题(通常在旋转屏幕时显示为NullPointerException ) 请查看Android Activity的生命周期,并确保您不只是试图破解devise缺陷。 如果您不确定,请在本网站上提出您的原始问题。