|
java파일
LayoutInflater inflate = (LayoutInflater) getActivity().getSystemService(Service.LAYOUT_INFLATER_SERVICE);
map_box = (LinearLayout)inflate.inflate(R.layout.map_fragment, null);
mGoogleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap();
map_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map_box"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:visibility="visible" >
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</fragment>
</LinearLayout>
에서 구글 맵api를 사용하고 있습니다 . 위와 같이 사용하여서 구글 지도가 필요로 할때 inflate를 해서 사용하고 사용하지 않을때는 메모리를 해제시키는 방법으로 사용하고있습니다.
LayoutInflater inflate = (LayoutInflater) getActivity().getSystemService(Service.LAYOUT_INFLATER_SERVICE);
map_box = (LinearLayout)inflate.inflate(R.layout.map_fragment, null);
문제는 요부분인데요.
map_box는 Linearlayot으로 전역변수구요. 한번 사용을하고 한동안 사용을 안하면 map_box와 mGoogleMap을 null처리 해서 System.gc()로 메모리를 해제시켜주고 있습니다. mGoogleMap에는 따로 clear()함수로 마커를 다 없애주고 있구요. null처리 이후에 다시 map_box = (LinearLayout)inflate.inflate(R.layout.map_fragment, null); 을 실행하면
-로그-
10-15 14:15:49.623: E/Error(11913): android.view.InflateException: Binary XML file line #13: Error inflating class fragment
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
10-15 14:15:49.623: E/Error(11913): at com.View.MainView.MapInit(MainView.java:742)
10-15 14:15:49.623: E/Error(11913): at com.View.MainView.getMapBox(MainView.java:641)
10-15 14:15:49.623: E/Error(11913): at com.View.AllBulletinListView$5.xxonClick(AllBulletinListView.java:289)
10-15 14:15:49.623: E/Error(11913): at android.view.View.performClick(View.java:4192)
10-15 14:15:49.623: E/Error(11913): at android.view.View$PerformClick.run(View.java:17248)
10-15 14:15:49.623: E/Error(11913): at android.os.Handler.handleCallback(Handler.java:615)
10-15 14:15:49.623: E/Error(11913): at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 14:15:49.623: E/Error(11913): at android.os.Looper.loop(Looper.java:137)
10-15 14:15:49.623: E/Error(11913): at android.app.ActivityThread.main(ActivityThread.java:4950)
10-15 14:15:49.623: E/Error(11913): at java.lang.reflect.Method.invokeNative(Native Method)
10-15 14:15:49.623: E/Error(11913): at java.lang.reflect.Method.invoke(Method.java:511)
10-15 14:15:49.623: E/Error(11913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
10-15 14:15:49.623: E/Error(11913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
10-15 14:15:49.623: E/Error(11913): at dalvik.system.NativeStart.main(Native Method)
10-15 14:15:49.623: E/Error(11913): Caused by: java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f0800c7, tag null, or parent id 0x7f0800c6 with another fragment for com.google.android.gms.maps.MapFragment
10-15 14:15:49.623: E/Error(11913): at android.app.Activity.onCreateView(Activity.java:4833)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
10-15 14:15:49.623: E/Error(11913): ... 18 more
10-15 14:15:49.623: E/Error(11913): java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f0800c7, tag null, or parent id 0x7f0800c6 with another fragment for com.google.android.gms.maps.MapFragment
10-15 14:15:49.623: E/Error(11913): at android.app.Activity.onCreateView(Activity.java:4833)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-15 14:15:49.623: E/Error(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
10-15 14:15:49.623: E/Error(11913): at com.View.MainView.MapInit(MainView.java:742)
10-15 14:15:49.623: E/Error(11913): at com.View.MainView.getMapBox(MainView.java:641)
10-15 14:15:49.623: E/Error(11913): at com.View.AllBulletinListView$5.xxonClick(AllBulletinListView.java:289)
10-15 14:15:49.623: E/Error(11913): at android.view.View.performClick(View.java:4192)
10-15 14:15:49.623: E/Error(11913): at android.view.View$PerformClick.run(View.java:17248)
10-15 14:15:49.623: E/Error(11913): at android.os.Handler.handleCallback(Handler.java:615)
10-15 14:15:49.623: E/Error(11913): at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 14:15:49.623: E/Error(11913): at android.os.Looper.loop(Looper.java:137)
10-15 14:15:49.623: E/Error(11913): at android.app.ActivityThread.main(ActivityThread.java:4950)
10-15 14:15:49.623: E/Error(11913): at java.lang.reflect.Method.invokeNative(Native Method)
10-15 14:15:49.623: E/Error(11913): at java.lang.reflect.Method.invoke(Method.java:511)
10-15 14:15:49.623: E/Error(11913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
10-15 14:15:49.623: E/Error(11913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
10-15 14:15:49.623: E/Error(11913): at dalvik.system.NativeStart.main(Native Method)
10-15 14:15:51.675: E/AndroidRuntime(11913): FATAL EXCEPTION: main
10-15 14:15:51.675: E/AndroidRuntime(11913): android.view.InflateException: Binary XML file line #13: Error inflating class fragment
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.View.MainView.MapInit(MainView.java:742)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.View.MainView.getMapBox(MainView.java:641)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.View.AllBulletinListView$5.xxonClick(AllBulletinListView.java:289)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.View.performClick(View.java:4192)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.View$PerformClick.run(View.java:17248)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.os.Handler.handleCallback(Handler.java:615)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.os.Looper.loop(Looper.java:137)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.app.ActivityThread.main(ActivityThread.java:4950)
10-15 14:15:51.675: E/AndroidRuntime(11913): at java.lang.reflect.Method.invokeNative(Native Method)
10-15 14:15:51.675: E/AndroidRuntime(11913): at java.lang.reflect.Method.invoke(Method.java:511)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
10-15 14:15:51.675: E/AndroidRuntime(11913): at dalvik.system.NativeStart.main(Native Method)
10-15 14:15:51.675: E/AndroidRuntime(11913): Caused by: java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f0800c7, tag null, or parent id 0x7f0800c6 with another fragment for com.google.android.gms.maps.MapFragment
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.app.Activity.onCreateView(Activity.java:4833)
10-15 14:15:51.675: E/AndroidRuntime(11913): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
10-15 14:15:51.675: E/AndroidRuntime(11913): ... 18 more
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.View.MainView.MapInit(MainView.java:742)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.View.MainView.getMapBox(MainView.java:641)
10-15 14:15:51.675: E/AndroidRuntime(11913): at com.View.AllBulletinListView$5.xxonClick(AllBulletinListView.java:289)
요부분이 바로 map_box = (LinearLayout)inflate.inflate(R.layout.map_fragment, null); 이부분인데,
mGoogleMap = ((MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.map)).getMap(); 이 부분에서 getActivity().getFragmentManager().findFragmentById(); 이걸 보면 Activity에 FragmentManager에 이미 map_box = (LinearLayout)inflate.inflate(R.layout.map_fragment, null); 이게 올라가있어서 안되는거 같은데........... 아... 모르겠어요... 이게 지도를 사용안하는데 계속 메모리에 올려두자니 메모리문제가 일어날꺼 같고.... 지도를 필요할때만 불러오고 사용안하면 메모리를 해제시킬려니까 또 안되고ㅠㅠㅠㅠㅠ 우째얍니까이거 ㅜㅜ
항상 수고많으시고 고생하시는 슈퍼성근님!! 도와주세요!!!!
첫댓글 안녕하세요.
본 문제는 프래그먼트를 화면에 추가한뒤 제거하지 않은 상태에서
다시 추가해서 발생된 문제입니다.
프래그먼트는 액티비티에 한번 추가하면
제거할 때까지 사라지지 않습니다.
위에서 null로 처리하신다 했지만
xml에 들어간 정적 프래그먼트는 계속 존재하는 것이죠.
해결방법을 알려드리기엔 소스 전체적인 구성을 알아야하기에 어렵네요.
어쨌든 Fragment에 대한 이해가 필요하신 것 같습니다. T-T
제가 현재 프래그먼트에 대한 강좌를 올리고 있으니 꼭 읽어보셨으면 좋겠습니다. ^^
카페 좌측에 "책에 담지 못한 장들" 게시판 입니다.
수고하세요.
감사합니다!! 항상 감사드립니다!
프레이그먼트 강의 3번째 강의를 보고 해답을 찾았습니다 감사합니다 !!!!
@별로ㅡㅡ 도움이 되어서 행복하네요.