Android Application class란? App 전체에서 참조해야할 간단히 전역 객체 만들기


java.lang.Object
android.content.Context
android.content.ContextWrapper
android.app.Application

Android에는 Application이라는 Object가 있습니다. 상속구조는 위와 같습니다. Singleton 처럼 전역 클래스 같은 역활을 하는 녀석이라고 하네요. Activity간에 데이터를 공유할 때 유용하다고 합니다.

Application을 상속받아 MyApplication을 만들어보겠습니다. 먼저 src\package에 MyApplication.java 파일을 만듭니다.


package org.cocos2dx.application;

import android.app.Application;
import android.util.Log;

public class MyApplication extends Application {
        public String strTest;
@Override
public void onCreate(){
super.onCreate();
                Log.d("MyApp", "MyApp onCreate");
}

        public void testfunc(){
Log.d("MyApp", "testfunc");
}

}
내용은 간단히 이렇게 입력합니다. 이제 AndroidManifest.xml의 <application> 태그를 수정해야합니다. 기존에

    <application android:label="@string/app_name"
        android:debuggable="true"
        android:icon="@drawable/icon">
...
    </application>
로 되어있는부분에서 andoird:name="MyApplication"을 하나 추가합니다.


    <application android:label="@string/app_name"
        android:debuggable="true"
        android:icon="@drawable/icon"
        android:name="MyApplication">



이런식으로 말이죠. 저는 처음에 잘 몰라 아예


<application android:label="@string/app_name" android:name="MyApplication">
     
    </application>

이런식으로 하나를 더 추가를 해줬더니 안되더군요. <application> 태그는 한개만 있어야 한다고 하네요.


public class ApplicationDemo extends Cocos2dxActivity{
private Cocos2dxGLSurfaceView mGLView;
        //MyApplication 변수 추가
private MyApplication myTestApp;

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

if (detectOpenGLES20()) {
...


                        // Set framelayout as the content view
setContentView(framelayout);

                        //MyApplication 사용 샘플 부분

myTestApp= (MyApplication)getApplicationContext();
myTestApp.strTest = "MyApplication Testing";
Log.d("MyApp", myTestApp.strTest);

myTestApp.testfunc();
                }
...
}


cocos2d-x의 Main Activity에 만든 MyApplication변수를 추가하고 onCreate 마지막 부분에 변수에 값을 넣어서 로그를 찍어보거나 MyApplication의 멤버함수를 호출해봤습니다.

public class MyApplication extends Application {
        public String strTest;
        private static MyApplication instance;

        public MyApplication getInstance(){
                return instance;
        }

@Override
public void onCreate(){
super.onCreate();
                Log.d("MyApp", "MyApp onCreate");
                instance = this;
}

        public void testfunc(){
Log.d("MyApp", "testfunc");
}

}
Singleton처럼 하려면 위와 같이하면 되겠죠.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.