相关疑难解决方法(0)

哪个更适合ListView的图像加载?

我想知道两个中哪一个更好地从web中加载listview中的图像,是通过批量通过一些同时运行的线程还是通过线程队列一个接一个地运行?

我注意到(但我不知道这是否真的是实现)来自youtube应用程序,图像是按批次加载的,而且它有点快.即使不仅要加载图像,还要从网上请求一些数据.有没有人有想法?

android

8
推荐指数
1
解决办法
3145
查看次数

ListView包含图像和文本

创建列表视图的方法是什么,左侧是图像,后面是文本?(注意:图像以前是从网上下载的)提前感谢!

android listview

8
推荐指数
2
解决办法
3万
查看次数

Android - 将图像延迟加载到ListView中的问题

这是一种非常常见的情况:在ListView中显示必须从Internet下载的图像.

现在我有一个ArrayAdapter的自定义子类,我将其用于ListView.在ArrayAdapter的getView()实现中,我生成了一个单独的线程来加载图像.加载完成后,它会查找相应的ImageView并使用ImageView.setImageDrawable()设置图像.所以我使用的解决方案与此类似:在ListView中延迟加载图像

我遇到的问题是,一旦我在ImageView上调用setImageDrawable(),ListView就会以某种方式刷新列表中所有当前可见的行!这会产生一种无限循环:

  1. 调用getView()
  2. 生成线程以加载图像
  3. 图像已加载; 在ImageView上调用setImageDrawable()
  4. ListView由于某种原因选择它并刷新自己
  5. 为了刷新ListView,为每个可见行调用getView(),所以我们回到第1步,整个过程重复

所以据我所知,"Android中如何在ListView中对图像进行延迟加载"(参见上面的链接)中提出的解决方案根本不起作用.它可能看起来像它,但它会运行得非常慢,因为在后台,它会不断重新加载当前可见的行.

之前是否有人遇到此问题和/或有解决方案?

java android listview lazy-loading image

7
推荐指数
1
解决办法
1万
查看次数

Android,如何从网址延迟加载图片并持久地将它们缓存在图库小部件中?

我正在实施Android图库小部件.我问如何懒惰(即在一个单独的线程中)从Web加载图像并持久缓存它们?所以在下一次运行中我有本地可用的缓存图像......

android caching lazy-loading image gallery

7
推荐指数
2
解决办法
2万
查看次数

异步下载适配器中的位图,重点介绍Bitmap.recycle()

有人能告诉我如何为异步制作一个好的机制.下载用于ListView/GridView的图像?有许多建议,但每个只考虑典型要求的一小部分.

下面我列出了一些合理的因素(要求或要考虑的因素),我和我的同事们不能立刻满足.
我不是要求代码(虽然它是受欢迎的),只是一种管理所描述的位图的方法.

  1. 没有重复的下载程序或位图
  2. 取消下载/分配不再需要或可能自动删除的图像(SoftReference等)
  3. 注意:适配器可以有多个视图用于相同的ID(对getView(0)的调用非常频繁)
  4. 注意:无法保证视图不会丢失而不是回收(考虑List/GridView调整大小或按文本过滤)
  5. 视图和数据/逻辑的分离(尽可能多)
  6. 不为每次下载启动单独的线程(UI的可见减速).使用队列/堆栈(BlockingQueue?)和线程池,或某些....但需要结束,如果活动停止.
  7. 清除位图与列表/网格中的当前位置相距足够远,优选仅在需要存储器时
  8. 在要丢弃的每个Bitmap上调用recycle().
  9. 注意:外部存储器可能无法使用(无论是在任何时候还是在所有时间),如果使用的话,应该尽快清除(仅限于此处下载的图像)(考虑Android的Activity destroy/recreation)
  10. 注意:可以更改数据:删除条目(多选和删除)并添加(在后台线程中).已经下载的位图应该保留,只要它们链接的条目仍然存在.
  11. setTextFilterEnabled(true)(如果基于ArrayAdapter的机制,将影响数组索引)
  12. 可用于ExpandableList(影响缩略图的显示顺序)
  13. (可选)下载Bitmap时,只刷新相关的ImageView(列表项可能非常复杂)

请不要发布个别积分的答案.我的问题是,我们越是专注于某些方面,其他人就越模糊,海森堡就像.
每个都增加了难度维度,特别是Bitmap.recycle,需要在操作和Activity销毁期间调用(请注意onDestroy,甚至onStop可能不会被调用).
这也排除了依赖SoftReferences.
这是必要的,或者我甚至在使用任何数量的gc,sleep(20s,偶数),在try-catch(以强制受控的OutOfMemory)之后产生和大量数组分配后得到OutOfMemoryError.
我已经重新采样了Bitmaps.

android lazy-loading bitmap adapter recycle

7
推荐指数
1
解决办法
1501
查看次数

Android快速位图加载

我有一块想要在屏幕上加载的图像.所有图像都是我下载并存储在SD-CARD上的文件.

到目前为止,我发现了两种方法,首先是在活动开始时将它们加载到主线程上(我得到了大约70个图像,所有加载它们需要大约2.1秒).

另一种方式是我现在正在测试的.将它们加载到分离的线程上,同时我可以为用户显示加载动画.现在我使用ThreadPoolExecutor实现了4.3秒.我在10个线程上做到了.

最后一种方法,(这是我唯一没有测试的方法)是使用精灵表.

我不能使用应用程序缓存,因为在我的应用程序中我有很多屏幕,每个屏幕都有自己的图像集.

您怎么看?加载大量图像的最快方法是什么?您知道哪些加速技术可以帮助我?

android load bitmap

7
推荐指数
2
解决办法
6249
查看次数

懒惰下载图像到gridView

在我的应用程序中,我需要从网址下载大量图片并将其显示在gridView中.(可能在1-200张图片之间).我不想一次下载所有图片.我读到了关于懒惰下载的问题,我的问题是:我是否只能获得Json的一部分,在不同的线程中下载图片,并且只有当用户向下滚动 gridView时,我才会继续使用Json的其他部分,并且等等?

编辑:你好.我想在这个gridView中实现多选,我很难在适配器的getView()方法中实现代码.这是我正在使用的示例:示例.如何在我的getView()方法中组合此代码:

public View getView(int position, View convertView, ViewGroup parent) {
        CheckableLayout l;
        ImageView i;

        if (convertView == null) {
            i = new ImageView(Grid3.this);
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            i.setLayoutParams(new ViewGroup.LayoutParams(50, 50));
            l = new CheckableLayout(Grid3.this);
            l.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,
                    GridView.LayoutParams.WRAP_CONTENT));
            l.addView(i);
        } else {
            l = (CheckableLayout) convertView;
            i = (ImageView) l.getChildAt(0);
        }

        ResolveInfo info = mApps.get(position);
        i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

        return l;
    }


public class CheckableLayout extends FrameLayout implements Checkable {
    private boolean mChecked;

    public CheckableLayout(Context context) {
        super(context);
    }

    public void setChecked(boolean …
Run Code Online (Sandbox Code Playgroud)

android json gridview lazy-loading

7
推荐指数
1
解决办法
2万
查看次数

图像在ListView中重复

我已经实现了android应用程序,它应该从服务器下载图像并在ListView中显示它们,但是在下载图像时会发生非常有趣的事情

您可以在视频图片中看到尚未下载的视频图片已由已下载的视频图片表示.怎么会这样?我差不多两天都在考虑它.

http://www.youtube.com/watch?v=lxY-HAuJO0o&feature=youtu.be

这是我的ListView适配器代码.

public class MoviesAdapter extends ArrayAdapter<ParkCinema> {
        private ArrayList<ParkCinema> movieDataItems;   
        private Activity context;

        public MoviesAdapter(Activity context, int textViewResourceId, ArrayList<ParkCinema> movieDataItems) {
            super(context, textViewResourceId, movieDataItems);
            this.context = context;
            this.movieDataItems = movieDataItems;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) { 
            if (convertView == null) {
                LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = vi.inflate(R.layout.movie_data_row, null);
                }

            ParkCinema movie = movieDataItems.get(position);

            if (movie!=null){
                        ImageView imageView = (ImageView) convertView.findViewById(R.id.movie_thumb_icon);
                        String url = movie.poster();

                         if (url!=null) {
                            Bitmap bitmap = …
Run Code Online (Sandbox Code Playgroud)

android android-layout

7
推荐指数
1
解决办法
6310
查看次数

为什么ImageView.setImageURI()在Android 2.2中工作但不在2.1中工作?

我正在使用适配器在列表视图中显示图像和一些文本.图像从Web中提取,然后在本地缓存并显示.图像已经很小(60px方形),我知道它们的大小,所以我使用了这里的建议,建议我使用setImageURI而不是解码位图.

完成这项工作的课程是Fedor的ImageLoader的修改版本

代码将一个可绘制的存根附加到ImageView,直到从Web下载所需的图像,然后从SD卡加载缓存的文件.在Android 2.2中,这很好用.这很快,我没有OOM崩溃.但是在2.1上,我收到以下错误:

09-15 11:04:52.993: INFO/System.out(240): resolveUri failed on bad bitmap uri: file:///sdcard/android/data/com.example.myapp/cache/4164137
Run Code Online (Sandbox Code Playgroud)

ImageLoader类如下:

/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy …
Run Code Online (Sandbox Code Playgroud)

android uri imageview

6
推荐指数
1
解决办法
1万
查看次数

Android应用程序:SocketException权限被拒绝(没有这样的文件或目录)

我正在尝试使用Fedor编写和上传的代码发布在这个线程 中ListView中的图像延迟加载(源代码:http://open-pim.com/tmp/LazyList.zip)

Fedor的项目运行良好,但是当我尝试将代码调整到我的项目时,由于我碰到了这个异常(SocketException),所以事情运行得不好.

不知何故,即使在清单中设置权限以获得Internet权限之后,我仍然继续获取它(是的,我有一个Internet连接工作):

<uses-sdk android:minSdkVersion="8">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
</uses-sdk>
Run Code Online (Sandbox Code Playgroud)

例外:SocketException:权限被拒绝.观看LogCat详细信息.

09-24 23:43:00.591: ERROR/File was not found.(1124): /mnt/sdcard/ListViewTest/-421624214 (No such file or directory)
09-24 23:43:00.601: WARN/System.err(1124): java.net.SocketException: Permission denied
09-24 23:43:00.611: WARN/System.err(1124):     at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocketImpl(Native Method)
09-24 23:43:00.611: WARN/System.err(1124):     at org.apache.harmony.luni.platform.OSNetworkSystem.createStreamSocket(OSNetworkSystem.java:186)
09-24 23:43:00.622: WARN/System.err(1124):     at org.apache.harmony.luni.net.PlainSocketImpl.create(PlainSocketImpl.java:265)
09-24 23:43:00.632: WARN/System.err(1124):     at java.net.Socket.checkClosedAndCreate(Socket.java:873)
09-24 23:43:00.632: WARN/System.err(1124):     at java.net.Socket.connect(Socket.java:1020)
09-24 23:43:00.632: WARN/System.err(1124):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:62)
09-24 23:43:00.642: WARN/System.err(1124):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:88)
09-24 23:43:00.642: WARN/System.err(1124):     at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHTTPConnection(HttpURLConnectionImpl.java:927)
09-24 23:43:00.652: WARN/System.err(1124):     at …
Run Code Online (Sandbox Code Playgroud)

sockets android

6
推荐指数
1
解决办法
2万
查看次数