Dus*_*ica 47 lifecycle android
我知道当屏幕方向改变时,调用当前活动onDestroy(),然后调用onCreate()以有效地重新创建活动.我需要知道如何以编程方式判断应用程序是否已退出,或者是否只是更改了方向.
一种方法是让前一个活动在调用其onResume()方法时通知我,这将让我知道用户按下了后退按钮并且方向没有被更改.
PS我正在寻找一种比听取后面硬件按钮点击更优雅的解决方案.
这是我想要做的:
我有两个选项卡,当第一次输入活动或用户离开活动并且现在正在输入活动时,会根据某些标准显示某个选项卡.
当方向改变时,我需要保持在同一个选项卡上.
dmo*_*mon 96
使用Activity的isFinishing()
方法.
@Override
protected void onDestroy() {
super.onDestroy();
if (isFinishing()) {
// do stuff
} else {
//It's an orientation change.
}
}
Run Code Online (Sandbox Code Playgroud)
Min*_*wzy 21
你可以使用isChangingConfigurations()
Read from 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");
}
}
Run Code Online (Sandbox Code Playgroud)
综述
您可以使用isChangingConfigurations
在onStop
检查应用程序停止被破坏或由于取向改变.
或者你可以在这里isFinishing
查看我的答案
归档时间: |
|
查看次数: |
15757 次 |
最近记录: |