我有一个带有大量片段的ViewPagerActivity(滑动视图)。每个片段都包含一个imageView。有时,当我在这些片段之间导航时,我有一个错误:
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)
使用寻呼机时,所有图像都保存在内存中。如果您快速切换页面可能会出现一个问题。要解决此问题,请在读取滑动之间添加一点延迟。其次,如果文件很大,那么随着堆栈的累积,你会随着时间的推移收到这个错误。考虑减少图像大小或在一定数量后删除页面,并在以后需要时添加它们。最后,如果您使用模拟器测试您的设备,您可能只需要增加模拟器的内存。