2013-11-25 1 views
0

많은 조각 (스 와이프보기)이있는 ViewPagerActivity가 있습니다. 각 프래그먼트는 imageView를 포함합니다. 나는이 조각 사이를 탐색 할 때 때때로, 나는 오류가 있습니다setOmageUri를 사용하여 OutOfMemory

11-25 23:22:05.880: E/AndroidRuntime(15019): FATAL EXCEPTION: main 
11-25 23:22:05.880: E/AndroidRuntime(15019): java.lang.OutOfMemoryError 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:650) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:476) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:781) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.graphics.drawable.Drawable.createFromStream(Drawable.java:741) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.widget.ImageView.resolveUri(ImageView.java:631) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.widget.ImageView.setImageURI(ImageView.java:379) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at com.thesnowcoach.android.jpgviewer.JpgFragment.loadNewCourse(JpgFragment.java:381) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at com.thesnowcoach.android.jpgviewer.JpgFragment.onCreateView(JpgFragment.java:199) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1478) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
11-25 23:22:05.880: E/AndroidRuntime(15019): at android.support.v4.view.ViewPager$3.run(ViewPager.java:244) 

코드 :

private void loadNewCourse(int times) { 

     Display display = this.getActivity().getWindowManager().getDefaultDisplay(); 

     int height = display.getHeight(); 

     mImageSwitcher.getLayoutParams().height=height; 

     barLayout.setBackgroundColor(Color.rgb(cours.getCategorie() 
       .getCouleur().getR(), cours.getCategorie().getCouleur().getV(), 
       cours.getCategorie().getCouleur().getB())); 
     // Ajout du titre de la progression à la fenetre 
     titreCours = (TextView) barLayout.findViewById(R.id.titreCours); 
     titreCours.setText(cours.getTitre()); 
     mImages = JpgViewerTools.loadPicturesFromSDCardExcept(absolutePath + File.separator 
       + cours.getId()); 

     slidesSize = mImages.size(); 

     mDifferentSlidesSize = ViewPagerActivity.slidesSize; 
     displaySlidesCount(); 
     if (times == 0) { 
      barState = BarState.ELLAPSED; 
     } else 
      barState = BarState.ELLAPSED; 
     mImageSwitcher.setImageURI(Uri.fromFile(new File(mImages 
       .get(getArguments().getInt("position"))))); 

     state = setState(getArguments().getInt("position")); 
    } 

가 어떻게이 문제를 해결할 수 있습니까? 감사합니다.

답변

0

호출기를 사용하면 모든 이미지가 메모리에 보관됩니다. 페이지를 빠르게 전환하면 한 가지 문제가 발생할 수 있습니다. 이 문제를 해결하려면 스 와이프를 읽는 사이에 약간의 지연을 추가하십시오. 둘째, 파일이 커지면 스택이 올라감에 따라 시간이 지남에 따라이 오류가 발생합니다. 이미지 크기를 줄이거 나 특정 숫자 다음에 페이지를 버리고 나중에 필요할 경우 추가하십시오. 마지막으로 에뮬레이터를 사용하여 장치를 테스트하는 경우에는 에뮬레이터의 메모리를 늘려야 할 수 있습니다.

+0

특정 번호 뒤에 페이지를 놓고 나중에 필요할 경우 추가 할 수 있습니까? 스레드를 사용하여 각 이미지를로드하는 경우 문제가 해결 될 수 있습니까? –

+0

각 페이지 및 위치에 항목 또는 배열 목록을 유지하십시오. 위치를 옮길 때 표시되는 페이지를 업데이트하십시오. – Brianjs

+0

예가 있습니까? 나는 그것을 구현하는 방법을 이해하는 데 약간의 어려움이 있기 때문에 –