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");
}
}
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처럼 하려면 위와 같이하면 되겠죠.
댓글
댓글 쓰기