[4] 액티비티 라이프사이클 다루기 [2] 액티비티 일시정지, 다시시작

THIS LESSON TEACHES YOU TO

  1. Pause Your Activity
  2. Resume Your Activity

YOU SHOULD ALSO READ


 

During normal app use, the foreground activity is sometimes obstructed by other visual components that cause the activity to pause. For example, when a semi-transparent activity opens (such as one in the style of a dialog), the previous activity pauses. As long as the activity is still partially visible but currently not the activity in focus, it remains paused.

앱 사용중에, 포어그라운드 액티비티는 이따금씩 다른 비주얼 컴포넌트들에 의해서 가려지게 됩니다. 이 때 액티비티는 pause 가 되지요. 예를 들어 반 투명한 액티비티가 열릴 때 (대화창 스타일이 열린다거나), 이전 액티비티는 일시중지하게 됩니다. 액티비티가 여전비 부분적으로 보이는 한, pause 상태가 유지됩니다.

However, once the activity is fully-obstructed and not visible, itstops (which is discussed in the next lesson).

하지만, 일단 액티비티가 완전히 가려지거나 보이지 않게 된다면, stop 상태가 됩니다(다음 수업에서 얘기할겁니다)

As your activity enters the paused state, the system calls theonPause() method on your Activity, which allows you to stop ongoing actions that should not continue while paused (such as a video) or persist any information that should be permanently saved in case the user continues to leave your app. If the user returns to your activity from the paused state, the system resumes it and calls the onResume() method.

액티비티가 paused 상태로 진입하게 되면, 시스템은 onPause() 메서드를 액티비티에서 호출하게 됩니다. 진행되고 있는 액션을 멈출 수 있도록 하게 해 줍니다.  그리고 영구적으로 저장되어야 할 어떠한 정보도 놓치지않고 있습니다. 유저가 앱을 떠난다고 하더라도 말이지요. 만약 유저가 pause 상태로부터 다시 여러분의 앱으로 돌아온다면, 시스템은 onResume() 메서드를 호출할 것입니다.

Note: When your activity receives a call to onPause(), it may be an indication that the activity will be paused for a moment and the user may return focus to your activity. However, it’s usually the first indication that the user is leaving your activity.

주의 : When your activity receives a call to onPause(),  it may be an indication that the activity will be paused for a moment and the user may return focus to your activity. However, it’s usually the first indication that the user is leaving your activity. 액티비티가 onPause() 호출을 받으면, 액티비티가 곧 일시정지 할 것이라는 것을 나타냅니다. 그리고 사용자는 포커스를 액티비티에게 되돌려줍니다 . 그러나 이것은 일반적으로 사용자가 액티비티를 떠나는 첫 인디케이션입니다. (이게 무슨 말인지 모르겠어요 ^^^^^)

Figure 1. When a semi-transparent activity obscures your activity, the system calls onPause() and the activity waits in the Paused state (1). If the user returns to the activity while it’s still paused, the system calls onResume() (2).

그림 1. 반투명 액티비티가 우리의 액티비티를 가릴 때, 시스템은 onPause()를 호출하고 액티비티는 Paused 상태인채로 대기하게 됩니다(1). 만약 사용자가 paused 인 액티비티로 돌아오게 된다면. 시스템은 onResume()메서드를 호출합니다.

액티비티 일시정지하기 – Pause Your Activity


When the system calls onPause() for your activity, it technically means your activity is still partially visible, but most often is an indication that the user is leaving the activity and it will soon enter the Stopped state. You should usually use the onPause() callback to:

시스템이 onPause() 를 액티비티에서 호출 할 때, 우리의 액티비티의 일부가 여전히 가시적이라는 뜻이며, 대부분은 사용자가 액티비티를 떠나고 곧 Stopped 상태가 될 것입니다. 우리는 일반적으로 onPause() 콜백을 이럴 때 사용합니다.

  • Stop animations or other ongoing actions that could consume CPU.
  • Commit unsaved changes, but only if users expect such changes to be permanently saved when they leave (such as a draft email).
  • Release system resources, such as broadcast receivers, handles to sensors (like GPS), or any resources that may affect battery life while your activity is paused and the user does not need them.
  • 애니메이션 정지, CPU를 소모할 수 있는 현재 실행중인 액션을 정지
  • 저장되지 않은 변경사항 commit, 사용자가 이러한 변화를 영구적으로 저장하는 것을 기대할 때 (작성중 이메일 등)
  • 시스템 자원을 반환, broadcast receivers, 센서 handles(GPS같은), 배터리를 잡아먹는 리소스들 (paused 가 되면 어디상 잡아먹지 않음)

For example, if your application uses the Camera, the onPause() method is a good place to release it.

예를 들어, 만약 우리의 앱이 카메라를 사용한다면, onPause()메서드가 카메라를 릴리즈하는데 좋다.

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first

    // Release the Camera because we don't need it when paused
    // and other activities might need to use it.
    if (mCamera != null) {
        mCamera.release()
        mCamera = null;
    }
}

Generally, you should not use onPause() to store user changes (such as personal information entered into a form) to permanent storage. The only time you should persist user changes to permanent storage withinonPause() is when you’re certain users expect the changes to be auto-saved (such as when drafting an email). However, you should avoid performing CPU-intensive work during onPause(), such as writing to a database, because it can slow the visible transition to the next activity (you should instead perform heavy-load shutdown operations during onStop()).

일반적으로 우리는 onPause를 사용자의 변화(폼에 들어있는 개인정보)등을 저장소에 보관하기 위해서 사용해서는 안됩니다. onPause() 상태일 때 저장하려고 하는 것은 자동저장(이메일 본문 임시저장) 같은 때만 사용합니다. 그리고 onPause() 동안에는 CPU가 많이 쓰이는 작업을 피하는 것이 좋습니다. 예를 들어 DB를 쓴다거나 할때. 왜냐하면 다음 액티비티로 넘어가는 화면 전환을 느리게 할 수 있기 때문입니다 (이럴 땐 onStop() 동안 그러한 작업을 하는게 좋습니다.)

You should keep the amount of operations done in the onPause() method relatively simple in order to allow for a speedy transition to the user’s next destination if your activity is actually being stopped.

화면 전환을 빠르게 하기 위해서, onPause()메서드 내에서 동작할 것들의 양을 상대적으로 간단하게 유지해 줘야 합니다.

Note: When your activity is paused, the Activity instance is kept resident in memory and is recalled when the activity resumes. You don’t need to re-initialize components that were created during any of the callback methods leading up to the Resumed state.

주의 : 액티비티가 paused 일 때, 액티비티 인스턴스는 메모리에서 지켜지고, 액티비티가 resume 될 때 사시 불려지게 됩니다. 우리는 컴포넌트들을 다시 초기화 할 필요가 없습니다.

액티비티 재개하기 – Resume Your Activity


When the user resumes your activity from the Paused state, the system calls the onResume() method.

사용자가 우리의 액티비티를 Paused 상태에서 다시 재개할 때, 시스템은 onResume() 메서드를 호출합니다.

Be aware that the system calls this method every time your activity comes into the foreground, including when it’s created for the first time. As such, you should implement onResume() to initialize components that you release during onPause() and perform any other initializations that must occur each time the activity enters the Resumed state (such as begin animations and initialize components only used while the activity has user focus).

우리의 액티비티가 foregroud 에 돌아올 때 마다, 시스템은 이 메서드를 호출합니다. 심지어 액티비티가 처음 생성되었을 때도 말이지요. 예를 들어, onPause() 동안 relaese했던 컴포넌트들을 초기화 할 때 onResume() 메서드를 구현해야만 합니다. 그리고 액티비티가 Resumed 상태로 진입할 때 매번 반드시 발생하는 초기화들을 모두 수행합니다 (애니메이션 시작, 사용자가 포커스했던 컴포넌트를 초기화할 때 등등)

The following example of onResume() is the counterpart to the onPause() example above, so it initializes the camera that’s released when the activity pauses.

다음 예는 onPause()의 반대부분입니다. pause에서 놓았던 카메라를 초기화합니다.

@Override
public void onResume() {
    super.onResume();  // Always call the superclass method first

    // Get the Camera instance as the activity achieves full user focus
    if (mCamera == null) {
        initializeCamera(); // Local method to handle camera init
    }
}

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중