반응형

 앱의 런처(Launcher) 액티비티(Activity) 지정하기

-------------------------------------------------

 디바이스의 홈 화면(Home Screen)에서 여러분의 앱 아이콘을 선택했을때, 시스템은 여러분의 앱에서 "launcher"(또는 "main")로 선언된 액티비티의 onCreate() 메소드를 호출합니다. 이 액티비티는 여러분 앱의 사용자 인터페이스(user interface : UI)에 진입하는 메인(main)으로 제공된 액티비티입니다. 


 여러분 프로젝트 디렉토리의 최상위에 있는 AndroidManifest.xml 메니페이스 파일안에 메인(main) 액티비티로 사용하도록 선언 할 수 있습니다.


 메인(main) 액티비티는 여러분 앱의 메니페스트 파일안에 반드시 Main action(액션)과  Launcher category(카테고리)를 포함한 <intent-filter> 태그를 가지고 선언되어 있어야 합니다.


예:

 <activity android:name=".MainActivity" android:label="@string/app_name">

    <intent-filter>

        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />

    </intent-filter>

</activity>

 


Note : 여러분이 Android SDK Tools 를 사용하여 새로운 액티비티 프로젝트를 생성했을때, Activity 클래스 하나가 기본 프로젝트 파일로 포함되어 있으며 이 Activity 는 filter 를 가지고 메니페스트안에 선언되어 있습니다.


 만약 여러분의 액티비티들 중 하나에 MAIN action 이나 LAUNCHER category 중 하나라도 선언하지 않으면, 여러분의 앱 아이콘(App Icon)은 홈 화면(Home Screen)의 앱(App) 목록에 나타나지 않을 것입니다.




 인스턴스 생성하기(Create New Instance)

-----------------------------------------------

 대부분의 앱은 사용자가 서로 다른 동작들을 하도록 하는 여러개의 다른 액티비티들을 포함하고 있습니다. 사용자가 여러분의 앱 아이콘을 클릭하여 처음 만들어진 메인 액티비티든지 사용자의 액션에 응답하여 시작하는 다른 액티비티 든지, 시스템은 onCreate() 메소드를 호출함으로서 새로운 Activity 인스턴스(instance)를 만들어 냅니다. 


 액티비티(Activity)의 전체 생애(Life)동안 오직 한번만 일어나는 기본 앱의 시작 로직(Startup Logic)을 실행시키기 위해 여러분은 반드시onCreate() 메소드를 구현해야만 합니다. 예를 들어, 여러분의 onCreate() 구현은 사용자 인터페이스(user interface: UI)를 정의해야 하고 몇가지 클래스 범위의 변수를 인스턴스화(instantiate) 하도록 합니다.


 예를 들어, 아래 나오는 onCreate() 메소드의 예제는 사용자 인터페이스(user interface:UI)-(XML 레이아웃 파일에 정의된), 멤버변수들의 정의, 그리고 UI의 몇가지 환경설정 같은 액티비티에 대한 몇몇 기본 설정(setup)을 실시하도록 하는 몇가지 코드를 보여줍니다.


 TextView mTextView; // Member variable for text view in the layout


@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);


    // Set the user interface layout for this Activity

    // The layout file is defined in the project res/layout/main_activity.xml file

    setContentView(R.layout.main_activity);

    

    // Initialize member TextView so we can manipulate it later

    mTextView = (TextView) findViewById(R.id.text_message);

    

    // Make sure we're running on Honeycomb or higher to use ActionBar APIs

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {

        // For the main activity, make sure the app icon in the action bar

        // does not behave as a button

        ActionBar actionBar = getActionBar();

        actionBar.setHomeButtonEnabled(false);

    }

}

Caution : SDK_INT의 사용은 Android 2.0(API level 5) 이상의 예전 시스템에서 새로운 APIs를 사용하는 것을 제한합니다. 예전 버전에서는 실행중 예외상황을 보게 될 겁니다. 



 onCreate()의 실행이 끝날을때, 시스템은 onStart()와 onResume()을 빠르고 성공적으로 호출합니다. 여러분의 액티비티는 절대로Created 와 Started 상태에서 머무르지 않습니다. 기술적으로 액티비티는 onStart()를 호출했을 때 사용자에게 보여지도록 되어있습니다. 하지만, onResume() 이 빠르게 따라오고 , 전화를 수신하거나, 사용자가 다른 액티비티로 이동하거나, 또는 디바이스 화면이 꺼질 때와 같이 액티비티가 전환되기 위해 어떤 일이 일어날때 까지는 Resumed 상태에서 남아있게 됩니다.


 이어지는 다른 수업에서, 여러분은 onStart()와 onResume() 같은 시작 설정 메소드들(start up methods)을 Paused 나 Stopped 상태로 부터 다시 이어하도록 하기 위해 액티비티의 생애주기(Lifecycle) 동안 어떻게 유용하게 사용할 지에 대해 보게 될 것입니다.


Note : onCreate() 메소드는 나중에 (액티비티 다시 생성하기)Recreating an Activity 수업에서 검토할 savedInstanceState 라고 불려지는 하나의 파라미터(parameter)를 포함하고 있습니다.



그림 2. 새로운 액티비티 인스턴스(Activity instance)가 생성될 때, 시스템이 순서대로 호출하는 3개의 주요 콜백(callback)들에 중점을 둔 액티비티 생명주기(Activity Lifecycle) 구조의 또 다른 그림. 이 콜백(callback)들의 순서가 완료되면, 액티비티는 Resumed 상태에 도착하게 되고 다른 액티비티로 전환할 때 까지 사용자와 상호 작용할 수 있게 됩니다. 




액티비티 파괴하기(Destroy the Activity)

---------------------------------------

 액티비티의 첫번째 생명주기 콜백(callback)은 onCreate()이며, 이 콜백들(callbacks)의 가장 마지막은 onDestroy() 입니다. 시스템은 액티비티 인스턴스가 시스템 메모리로부터 완전히 제거되기 시작할 때 마지막 신호로서 액티비티에서 이 메소드를 호출합니다.


 대부분의 어플들은 이 메소드의 구현이 필요하지 않습니다. 왜냐하면 지역 클래스 참조(references)들은 액티비티와 함께 파괴되어 지고 액티비티는 반드시 onPause() 와 onStop() 동안 대부분의 정리 작업(Cleanup)을 수행하기 때문입니다. 어쨋든, 만약 여러분의 액티비티가 onCreate()에서 만들어진 백그라운드(background스레드(Thread)를 포함하거나 오랫동안 실행되는 또 다른 리소스들로서 완전하게 닫히지 않고 잠재적으로 메모리 누수(memory leak)를 일으킬 수 있다면, 여러분은 onDestroy() 에서 그것들을 가급적 죽여야(kill) 합니다.


 @Override

public void onDestroy() {

    super.onDestroy();  // Always call the superclass

    

    // Stop method tracing that the activity started during onCreate()

    android.os.Debug.stopMethodTracing();

}


Note : 시스템은 한가지 경우(여러분이 onCreate() 메소드에서 finish()를 호출했을 때)를 제외한 모든 상황에서 onPause()와 onStop()이 호출된 이후에 onDestroy()를 호출합니다. 여러분의 액티비티가 또 다른 액티비티를 시작(Launch)하기 위한 임시 의사 결정자로 동작할 때와 같은 몇몇 경우에서 여러분은 액티비티를 파과하기 위해 onCreate() 안에 finish()를 호출할 지도 모릅니다. 이 경우 시스템은 다른 생명주기 메소드들(Lifecycle methods)중 어떤 것도 호출하지 않고 onDestroy()를 즉시 호출합니다.  

반응형

+ Recent posts