해당 문제는 android.app.application 만 실행이 되고 Custom Application은 실행이 되지 않아서 발생한 현상으로 casting이 안되는 이슈입니다.
많은 사용자를 대응을 하다보면 간혹 이런 현상을 발견을 한다.
안드로이드 스튜디오로 빌드할 경우 발생하는 현상으로 보인다.
삼성 디바이스 7.0 누가 버전에서 발생하는 문제로 보이지만 어찌됐든 안드로이드 앱 운영자라면 모든 케이스를 대응을 할 수 밖에 없는게 현실이기 때문에
방어코드를 추가해보고자 한다.
1. allowBackup을 false로 설정
해당 기능은 앱에서 쓰는 파일들을 백업을 한다고 한다. 재부팅을 하고 다시 로드할때에도 해당 정보를 다시 재사용을 한다고 구글에서는 말하고 있다.
보안에 취약하기 때문에 해당 기능을 false로 설정하고, tools:replace에 android:allowBackup을 추가해준다.
AndroidManifast.xml
<application
android:name="com.application.MyApplication"
android:allowBackup="false"
android:icon="@drawable/ibk_icon"
android:label="@string/app_name"
android:largeHeap="true"
android:theme="@style/app_theme"
tools:replace="android:icon, android:theme, android:allowBackup">
2. 싱글톤 패턴을 이용해서 MyApplication을 Get
MyApplication.java
public static MyApplication mMyApplication = null;
public static MyApplication getInstance() {
return mMyApplication;
}
@Override
public void onCreate() {
if (L.isEnable()) L.logD("YJS is started.");
mMyApplication = this;}
public void attachBase(Context context) {
attachBaseContext(context);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
RootActivity.java
public class RootActivity extends Activity {
public MyApplication getRealApplication() {
return getRealApplication(getApplicationContext());
}
private MyApplication getRealApplication(Context applicationContext) {
MyApplication application = null;
if (applicationContext instanceof App) {
application = (MyApplication) applicationContext;
} else {
if (App.getInstance() == null) {
MyApplication myApplication = new MyApplication();
myApplication.attachBase(applicationContext);
myApplication.onCreate();
}
application = MyApplication.getInstance();
}
return application;
}
}