안드로이드 개발 질문/답변
(글 수 45,052)
만들고 있는 어플이 랜드/포트 둘다 지원하게 되어서 질문드립니다.
피벗 전환시 onCreate까지 모두 타서 쓰레드 관리나 여러 면에서 문제가 생겨
android:configChanges="orientation|keyboardHidden"
속성을 주어 해당 루틴 타지 않고 onConfigurationChanged 만 타도록 했습니다.
이렇게 하면 이미지 들을 그냥 늘려쓰는 문제가 생겨
setContentView로 다시 레이아웃 배치하고 해당 레이아웃들 다시 할당해주었더니 문제가 발생하네요..
두세번 전환하면 죽습니다..
아래와 같은 로그캣이 찍힙니다... 대충 보아하니 Drawable이 해제 안되어서 그런건가요?ㅠㅠ
setContentView로 다시 배치하는건 위험한 건가욤...
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.parseInclude(LayoutInflater.java:679)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.rInflate(LayoutInflater.java:614)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.Activity.setContentView(Activity.java:1622)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.diotek.fingerpop.ui.MemoCanvas.onConfigurationChanged(MemoCanvas.java:935)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:3734)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:3803)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1936)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.os.Handler.dispatchMessage(Handler.java:99)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.os.Looper.loop(Looper.java:123)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Method.invokeNative(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Method.invoke(Method.java:521)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at dalvik.system.NativeStart.main(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): Caused by: java.lang.reflect.InvocationTargetException
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.widget.RelativeLayout.<init>(RelativeLayout.java:171)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Constructor.constructNative(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): ... 22 more
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:447)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.content.res.Resources.loadDrawable(Resources.java:1705)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.View.<init>(View.java:1850)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.View.<init>(View.java:1799)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.ViewGroup.<init>(ViewGroup.java:284)
피벗 전환시 onCreate까지 모두 타서 쓰레드 관리나 여러 면에서 문제가 생겨
android:configChanges="orientation|keyboardHidden"
속성을 주어 해당 루틴 타지 않고 onConfigurationChanged 만 타도록 했습니다.
이렇게 하면 이미지 들을 그냥 늘려쓰는 문제가 생겨
setContentView로 다시 레이아웃 배치하고 해당 레이아웃들 다시 할당해주었더니 문제가 발생하네요..
두세번 전환하면 죽습니다..
아래와 같은 로그캣이 찍힙니다... 대충 보아하니 Drawable이 해제 안되어서 그런건가요?ㅠㅠ
setContentView로 다시 배치하는건 위험한 건가욤...
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.parseInclude(LayoutInflater.java:679)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.rInflate(LayoutInflater.java:614)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:198)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.Activity.setContentView(Activity.java:1622)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.diotek.fingerpop.ui.MemoCanvas.onConfigurationChanged(MemoCanvas.java:935)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread.performConfigurationChanged(ActivityThread.java:3734)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread.handleConfigurationChanged(ActivityThread.java:3803)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1936)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.os.Handler.dispatchMessage(Handler.java:99)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.os.Looper.loop(Looper.java:123)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Method.invokeNative(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Method.invoke(Method.java:521)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at dalvik.system.NativeStart.main(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): Caused by: java.lang.reflect.InvocationTargetException
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.widget.RelativeLayout.<init>(RelativeLayout.java:171)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Constructor.constructNative(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): ... 22 more
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:447)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:323)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.content.res.Resources.loadDrawable(Resources.java:1705)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.View.<init>(View.java:1850)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.View.<init>(View.java:1799)
10-25 02:54:29.355: ERROR/AndroidRuntime(1099): at android.view.ViewGroup.<init>(ViewGroup.java:284)
2010.10.25 13:43:18
답변감사드려요~
1. 나인패치 쓰는게 있기는 한데...(seek bar) 이런건 어떻게 해야 하나요?
2. dp로 위치나 사이즈를 표시합니다. 이것 또한 어떻게 변경해야 하는지;;
3. layout-land, layout-port에 위치값이나 레이아웃이 다른 부분은 따로 넣어서 적용하고 있습니다.
land-port전환이 생각보다 신경쓸게 많네요..ㅠㅠ
1. 나인패치 쓰는게 있기는 한데...(seek bar) 이런건 어떻게 해야 하나요?
2. dp로 위치나 사이즈를 표시합니다. 이것 또한 어떻게 변경해야 하는지;;
3. layout-land, layout-port에 위치값이나 레이아웃이 다른 부분은 따로 넣어서 적용하고 있습니다.
land-port전환이 생각보다 신경쓸게 많네요..ㅠㅠ
2010.10.25 15:41:43
http://www.androidpub.com/?mid=android_dev_info&page=3&document_srl=742429
위의 글이 스레드 순서가 내려가서 잘 보이지 않지만, 위 글의 댓글이 도움이 될 수 있을지도 모르겠네요.
위의 글이 스레드 순서가 내려가서 잘 보이지 않지만, 위 글의 댓글이 도움이 될 수 있을지도 모르겠네요.




1. 이미지가 나인패치 이미지 인지 확인해보세요~
2. 레이아웃에 쓰인 위치 등의 표시가 dp나 dip인지 확인해보세요~
2. 또 다른방법으로는 Landscape 용 layout을 추가하는겁니다.
올리신 글 내용상으로는 Landscape와 Portrait 시 소스상의 특이점이 보이지 않으니,
layout-Land 라는 폴더를 만드신후 해당 폴더에 Landscape일때의 layout용 xml 을 만들어서 적용해 보세요.