귀하의 문제에서 내가 이해할 수있는 것입니다. 앱 충돌로 이어지는 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입니다.
아주 좋습니다! 이것은 아름답게 보이고 작동합니다. – portfoliobuilder
듣기 좋은데. :) –