2016-09-26 2 views
2

내 Android 앱에서 자원 집약적 인 작업을 거의 수행하지 않습니다. 앱을 종료하기 전에 항상 닫고 정리해야합니다. 내가 알고있는대로 onStop()/onDestroy() 앱을 죽이는 동안 실행주기가 보장되지 않을 수 있습니다. 따라서 이러한 메서드에 클로즈업/정리 작업을 적용하는 것은 신뢰할 수 없습니다. 이 기능을 구현하기 위해 Android가 제공하는 최상의 대안은 무엇입니까? 감사.앱 종료 전에 필수 정리 작업 수행

+1

'finally'블록을 사용하여 리소스를 닫을 수 있습니다. – Rustam

+0

'마지막'블록을 삽입하는 수명주기 방법은 무엇입니까? – Omkar

+0

https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – user1506104

답변

1

onStop, onDestroy 대신 을 사용해야합니다. 호출 할 수 있습니다.

1

내가 제안하는 것은 앱이 파괴 될 때 코드를 실행하기위한 주 활동에 onDestroy()를 오버라이드하거나 사용자가 앱을 종료 할 때 코드를 실행하기 위해 onStop()을 사용하는 것입니다.

활동이 파괴되기 전에 onDestroy()가 호출됩니다. 활동이 완료 중이기 때문에 호출 될 수 있습니다 (누군가 finish()를 호출 했음). 또는 공간을 절약하기 위해 활동의 인스턴스를 파괴하기 때문에 호출 될 수 있습니다. 이 두 시나리오는 isFinishing() 메소드를 사용하여 구분할 수 있습니다.

반면에 onStop()은 사용자가 더 이상 활동을 볼 수 없을 때 호출됩니다. 이것은 파괴되거나 다른 활동이 재개 되었기 때문에 발생할 수 있습니다. 사용자가 상호 작용하기 위해 활동이 돌아 오면 onRestart() 또는이 활동이 사라지면 onDestroy()를 따라 이동합니다. 마무리()가에서 onCreate() 메소드 내에서 호출되는 경우

@Override 
protected void onStop() { 
    super.onStop(); 
    // The activity is no longer visible i.e is it stopped now 
} 

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    //It is about to destroyed 
} 
+0

onStop() 및 onDestroy는 끝까지 실행되는 것이 보장되지 않습니다. 메소드의 일부만 실행할 수 있습니다. 앱을 종료 한 후 언제든지 Android 앱 프로세스가 종료 될 수 있습니다. – Omkar

1

onPause()와 중지시는()가 호출되지 않습니다. 예를 들어, onCreate() 중에 오류를 감지하고 결과로 finish()를 호출하면이 오류가 발생할 수 있습니다. 그런 경우에도 onPause() 및 onStop()에서 수행 할 것으로 예상되는 정리는 실행되지 않습니다.

onDestroy()는 활동의 라이프 사이클에서 마지막 콜백이지만이 콜백은 항상 호출되지는 않으며 리소스를 파괴하는 데 의존해서는 안된다는 점을 언급 할 필요가 있습니다. onStart() 및 onResume()에서 만든 리소스를 onStop() 및 onPause에서 각각 삭제하는 것이 좋습니다.

활동 라이프 사이클에 대한 자세한 내용은 Android 개발자 가이드를 참조하십시오. https://developer.android.com/training/basics/activity-lifecycle/starting.html

관련 문제