onBackPressed 메소드는 ‘이전 버튼’을 누를 시 호출되는 메소드입니다.
원래 (이전 버튼을 입력했을 때 프로그램을 종료) 하는 기능을 가집니다.
‘메소드 재정의’ 를 통해 이전 버튼 두 번을 클릭해야 프로그램을 종료되게 만들어 봅시다.
private var lastTimeBackPressed:Long=-1500 // 이전 버튼 두 번 눌러서 종료하기 override fun onBackPressed() { // (현재 버튼 누른 시간-이전에 버튼 누른 시간) <=1.5초일 때 동작 if(System.currentTimeMillis()-lastTimeBackPressed<=1500) finish() lastTimeBackPressed=System.currentTimeMillis() Toast.makeText(this,"이전 버튼을 한 번 더 누르면 종료됩니다",Toast.LENGTH_SHORT).show() }
System클래스의 currentTimeMillils함수는 현재까지 앱 구동 시간을 반환합니다.
이해를 위해 8번 라인부터 살펴 봅시다!
onBackPressed가 호출되면,
lastTimeBackPressed 변수는 currentTimeMillils() 반환 값(현재까지 앱 구동 시간)으로 저장됩니다.
이후,
onBackPressed가 한 번 더 호출되고 currentTimeMillis()-lastTimeBackPressed를 하면
현재까지 앱 구동 시간-과거까지 앱 구동 시간이 됩니다.
다르게 해석하면 현재 버튼 누른 시간-이전에 버튼 누른 시간이 되군요!
뺀 값이 1500보다 작으면(1.5초 이내면) finish함수를 호출해서 앱을 종료시키면 됩니다.
( lastTimeBackPressed: 이전에 버튼 누른 시간 )
하지만
이 방법이 가능하려면 lastTimeBackPressed변수는 전역변수로 미리 만들어져야 있어야 됩니다.
변수를 -1500으로 초기화하면 [ currentTimeMillis() -(-1500) > 1500 ]이 되니 처음 if문은 성립될 수가 없습니다.
이 과정이 끝나면 lastTimeBackPressed 변수가 제 역할을 해서 프로그램을 종료시킬 수 있겠네요!!