手机屏幕锁定时如何防止或处理onResume?

时间:2017-12-28 00:40:57

标签: android screen-orientation device-orientation

默认情况下,我的应用设置为方向横向。这导致设备被锁定时出现问题,因为方向将变为纵向(以容纳锁定的屏幕),这反过来强制onResume被调用。发生这种情况时,所有对象都为空,使应用程序容易崩溃。我做了一些更改,以防止崩溃和应用程序工作'确定'。 OK意味着当您从锁定屏幕返回应用程序时,半秒内UI处于纵向方向,然后再捕捉到正确的方向。

我已经做的事情要解决

我。添加了对onResume

中永远不会为null的所有对象的空检查

II。在清单

中添加了android:configChanges="orientation|screenSize"

III。在清单

中添加了android:screenOrientation="landscape"

还可以做些什么来使锁定屏幕转换回我的应用程序更顺畅,没有闪烁,闪烁或方向变化?

1 个答案:

答案 0 :(得分:1)

正如我从你的问题中可以理解的那样。您面临onResume()中导致应用程序崩溃的所有对象的null。 你无法真正避免再次调用onResume()。这是活动生命周期的预期行为。但是有一个技巧。您可以创建一个标志,以了解onPause()中的屏幕是否已关闭/打开。一旦手机解锁,它将拨打onResume(),您可以管理该标志。

boolean isScreenUnLock = false;        
@Override
protected void onPause() {
     super.onPause();
     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
     isScreenUnLock = pm.isScreenOn();      
}

@Override
protected void onResume() {
    super.onResume();
    if(isScreenUnLock){
        //Do something
    }
}

但这似乎不是更好的方式。我建议处理活动状态而不是避免Activity null中的所有对象。请查看this示例以获取更多详细信息。

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  // Save UI state changes to the savedInstanceState.
  // This bundle will be passed to onCreate if the process is
  // killed and restarted.
  savedInstanceState.putBoolean("MyBoolean", true);
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("MyInt", 1);
  savedInstanceState.putString("MyString", "Welcome back to Android");
  // etc.
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  // Restore UI state from the savedInstanceState.
  // This bundle has also been passed to onCreate.
  boolean myBoolean = savedInstanceState.getBoolean("MyBoolean");
  double myDouble = savedInstanceState.getDouble("myDouble");
  int myInt = savedInstanceState.getInt("MyInt");
  String myString = savedInstanceState.getString("MyString");
}

或快速处理上述状态。只需简单地使用此library