Android上的默认Gallery小部件不会回收视图 - 每次调用新位置的视图时,小部件总是调用getView适配器的方法convertView设置为null.
当您向后和向前滚动时,这会在创建的大量视图中结束,Gallery中存储的回收器组件似乎不会足够快地回收它们导致OOM情况.
您可以使用一些大图像作为您的图库项目轻松测试,但只有TextView最终会导致它.在getView适配器的方法中放置带有计数器的日志语句,以查看创建了多少新视图.
是否存在行为类似Gallery但又实现视图回收的第三方窗口小部件?
我昨晚发了一个关于这个问题的问题,但我不认为我解释得很好,可以得到适当的帮助.所以基本上,我有一个应用程序,您可以按下一个按钮,让您从图库中选择一个图像,并在我在应用程序中显示的ImageView中显示它.一切都很好.但是,当我再次按下按钮并选择不同的图片时,应用程序强制关闭.
更新现在,如果我从库中的下载照片文件夹中拍摄照片,它可以正常工作,可以随时切换照片.但当我回到我的相机照片文件夹来更改图片时,它会强行关闭.
更新2它也适用于我的Gallery应用程序中的任何其他文件夹.只有一个有这个问题(强制关闭)在"相机"文件夹上
更新3 19660800字节的外部分配对于此过程来说太大了.造成了这个问题.有什么方法可以减少所选照片的尺寸?
private static final int SELECT_PICTURE = 1;
private String selectedImagePath;
private ImageView img;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView)findViewById(R.id.myimageview);
((Button) findViewById(R.id.taptoadd))
.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,"Select Picture"), SELECT_PICTURE);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
System.out.println("Image …Run Code Online (Sandbox Code Playgroud)