아래처럼 viewpager 을 구현 했습니다.
페이지는 총 5페이지구요.
0 > 1 > 2 > 3 > 4 > 3 > 2 > 1 > 0
이런식으로 이동을 하게 되면 아래 와같은 에러가 발생합니다.
하지만 0 > 1 > 0 > 1 > 2 > 3 >2 > 3 > 4 > 3 > 2 > 1> 0 > 1 > ..... 이런식으로 한번이라도 갔던것곳을 여러번 왔다갔다하면 에러가발생하지않습니다.
문제가 멀까요??
아시면 답변좀 부탁드릴꼐요..
10-23 09:37:55.498: E/AndroidRuntime(21870): FATAL EXCEPTION: main
10-23 09:37:55.498: E/AndroidRuntime(21870): android.view.InflateException: Binary XML file line #35: Error inflating class <unknown>
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.createView(LayoutInflater.java:606)
10-23 09:37:55.498: E/AndroidRuntime(21870): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
10-23 09:37:55.498: E/AndroidRuntime(21870): at kr.aaa.adpter.NGamePager.instantiateItem(NGamePager.java:27)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.support.v4.view.PagerAdapter.instantiateItem(PagerAdapter.java:110)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:692)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.support.v4.view.ViewPager.populate(ViewPager.java:849)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.support.v4.view.ViewPager.populate(ViewPager.java:772)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.drawChild(ViewGroup.java:2729)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.View.draw(View.java:11155)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.widget.FrameLayout.draw(FrameLayout.java:450)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.View.draw(View.java:11155)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.widget.FrameLayout.draw(FrameLayout.java:450)
10-23 09:37:55.498: E/AndroidRuntime(21870): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2276)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewRootImpl.draw(ViewRootImpl.java:2184)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1786)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2602)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.os.Looper.loop(Looper.java:137)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.app.ActivityThread.main(ActivityThread.java:4512)
10-23 09:37:55.498: E/AndroidRuntime(21870): at java.lang.reflect.Method.invokeNative(Native Method)
10-23 09:37:55.498: E/AndroidRuntime(21870): at java.lang.reflect.Method.invoke(Method.java:511)
10-23 09:37:55.498: E/AndroidRuntime(21870): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
10-23 09:37:55.498: E/AndroidRuntime(21870): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
10-23 09:37:55.498: E/AndroidRuntime(21870): at dalvik.system.NativeStart.main(Native Method)
10-23 09:37:55.498: E/AndroidRuntime(21870): Caused by: java.lang.reflect.InvocationTargetException
10-23 09:37:55.498: E/AndroidRuntime(21870): at java.lang.reflect.Constructor.constructNative(Native Method)
10-23 09:37:55.498: E/AndroidRuntime(21870): at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.LayoutInflater.createView(LayoutInflater.java:586)
10-23 09:37:55.498: E/AndroidRuntime(21870): ... 40 more
10-23 09:37:55.498: E/AndroidRuntime(21870): Caused by: java.lang.OutOfMemoryError
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:577)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:445)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.content.res.Resources.loadDrawable(Resources.java:1935)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.view.View.<init>(View.java:2839)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.widget.ImageView.<init>(ImageView.java:113)
10-23 09:37:55.498: E/AndroidRuntime(21870): at android.widget.ImageView.<init>(ImageView.java:109)
10-23 09:37:55.498: E/AndroidRuntime(21870): ... 43 more
@Override
public Object instantiateItem(View pager, int position) {
LayoutInflater inflater = (LayoutInflater) pager.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(m_pagerResource[position], null);
((ViewPager)pager).addView(v, 0);
return v;
}
@Override
public void destroyItem(View pager, int position, Object obj) {
View view = (View) obj;
((ViewPager)pager).removeView((View)view);
view = null;
}
<view
class="android.support.v4.view.ViewPager"
android:id="@+id/vr_game_pager"
android:layout_width="match_parent"
android:layout_height="513dip"
android:layout_marginTop="75dip"
android:layout_marginLeft="0dip"
>
</view>
제가 많이 아는것은 아니지만 해당 로그는 메모리 부족이 원인으로 보여집니다.
10-23 09:37:55.498: E/AndroidRuntime(21870): Caused by: java.lang.OutOfMemoryError
그리고 뷰페이져에서 한번 갔던곳을 거쳐갈때 gc에서 메모리를 강제로 수집하며 현상이 발생안하는걸로 보여지네요^^;; 자세한건 잘 모르겠지만 어쨋건 페이지를 넘길때 할당 받은 메모리들을 돌려주는 코드가 필요할것 같습니다. bitmap이라고 치면 recycle() 같은 함수로요~ 아니면 간단하게 softreference를 쓰는것도 좋을 것 같습니다.
자세한 내용은 레퍼런스나 검색을 이용해보세요~