有没有办法知道由于设备轮换而重新创建了一个Activity

时间:2015-10-25 05:06:02

标签: android

我有一个活动类,每当它被恢复/重新创建时都会使用自定义PIN锁定自己(这样我就可以将我的手机借给那些知道他们无法看到应用程序数据的人)

这导致的问题是旋转设备会重新创建活动并重新显示PIN锁定,这有点不平滑。

那么,活动是否有某种方式可以知道

  1. 因为方向改变而被摧毁。
  2. 我是因为方向改变而被创建的。
  3. 如果可能的话,我想避免使用基于android:configChanges="orientation|screenSize"的解决方案。

    编辑:对于后代,我最终通过让应用程序中的所有活动都继承自此LockableActivity类来完成此操作。

3 个答案:

答案 0 :(得分:1)

一个非常简单的解决方案是检查'onPause'和'onResume'之间的时间。如果它小于0.2秒,那么你还没有把手机交给......

实际上,您可以将其设置为用户可控制的安全功能:用户可以设置再次输入引脚之前离活动的时间长度。

对于真正的痴迷,您可以要求用户在设置阶段重新定位手机,以确定相关的时间间隔并将其设置为最小值。

如其他地方所述,您也可以使用onSaveInstanceState。在这种方法中,您将在以后存储时间进行比较。

答案 1 :(得分:0)

将以下代码放入您的活动中,它会在设备旋转时触发

 @Override
        public void onConfigurationChanged(Configuration newConfig) {
            super.onConfigurationChanged(newConfig);

    //perform your operations here

        }

如果您还想检查它是横向还是纵向模式,您可以应用以下条件

     if(newConfig.orientation  == Configuration.ORIENTATION_LANDSCAPE){



        }
else {


        }

答案 2 :(得分:0)

如果您的活动通常被销毁,则永远不会调用onSaveInstanceState()。在方向更改期间(或需要加载不同资源的任何其他更改),将调用onSaveInstanceState()。在此方法中,您可以保存您希望活动在重新创建期间拥有的数据。

如果您的活动是正常创建的,savedInstanceState将是null。但如果它是由于重新创建而创建的(如方向更改),那么savedInstanceState将不会为空,您可以使用它来获取在onSaveInstanceState()期间保存的数据。

覆盖onConfigurationChanged()是一个坏主意,而您可以使用Android提供的这些方法来保留您的数据或应用程序逻辑。在您的情况下,onCreate()中可能会出现类似情况。

if(savedInstanceState != null){
       boolean loggedIn= savedInstanceState.getBoolean("LoggedIn",false);
       if(!loggedIn){
            // Not logged in, hence show pinlock
        }
 }

你可以这样做。