얼마전 이런 질문이 있었습니다.

http://www.androidpub.com/1972014#comment_1972948

볼레로님이 다이얼로그에서 안된다고 하셨는데 실제 해보니 안되더군요


화면에 시작하자마자 띄워야 하는 상황이 생겼습니다. 

onCraete에서만 3초를 잡아먹는 상황이 발생하였고 검은 화면을 막고자 

로딩이미지를 띄워야 하는데 onReasume이 호출되지 않아서 어떻게 하던

검은화면을 막을수가 없었습니다. 


해결방법으로는 쓰레드로 돌려서 onCreate를 빨리 벗어나는 방법이 있었는데

이렇게 해도 그다지...


그래서 버그성 어플을 만들어 버렸습니다. 

액티비티보다 더 위에 있는 화면에 붙여 버려서 해결했습니다.


서피스 -> 액티비티 -> 윈도우 이렇게 있는데 윈도우에 붙여서 화면에 시작하자마자 

스플레쉬 이미지를 띄우고 지우는 방법으로 해결했습니다.


잘되긴 하네요 문제가 있어서 그렇지..ㅠㅠ 

최상위에 붙이면 다른 액티비티에 영향을 주는.. 악성억플이 되는 문제가 발생됩니다.

전 이거 해결하러 .....


private Class cls;

private Object windowManagerImpl;

private ImageView splash;



private void setSplash() {

splash = new ImageView(this);

splash.setImageResource(R.drawable.pudding800_480);

try {


// public static WindowManagerImpl getDefault()

cls = Class.forName("android.view.WindowManagerImpl");

Method getDefault = null;

getDefault = cls.getDeclaredMethod("getDefault", null);

if (!getDefault.isAccessible()) {

getDefault.setAccessible(true);

}

// windowManagerImpl = getDefault.invoke(cls.newInstance() , new Object[] {});

windowManagerImpl = getDefault.invoke(null, null);

} catch (Throwable e) {

}


final WindowManager.LayoutParams params = new WindowManager.LayoutParams();

params.height = WindowManager.LayoutParams.WRAP_CONTENT;

params.width = WindowManager.LayoutParams.WRAP_CONTENT;

params.format = PixelFormat.TRANSLUCENT;

params.type = WindowManager.LayoutParams.TYPE_TOAST;


try {

Method addView = cls.getDeclaredMethod("addView", new Class[] { android.view.View.class,

android.view.ViewGroup.LayoutParams.class });

if (!addView.isAccessible()) {

addView.setAccessible(true);

}

addView.invoke(windowManagerImpl, new Object[] { splash, params });


} catch (Throwable e) {

System.err.println(e);

}

}


private void deleteSplash() {

Method removeView = null;

try {

removeView = cls.getDeclaredMethod("removeView", new Class[] { android.view.View.class });

if (!removeView.isAccessible()) {

removeView.setAccessible(true);

}

removeView.invoke(windowManagerImpl, new Object[] { splash });

} catch (Throwable e) {

}

if (dialog != null && dialog.isShowing()) {

dialog.dismiss();

}

}