小编ud_*_*_an的帖子

关于延迟加载适配器中的位图的共识(强调Bitmap.recycle())

我看到了大量的建议,但没有(我发现)考虑了所有因素,因素是:

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

如果有人回答,请原谅我.我搜索了几个月,但没有找到解决方案.

这些要求对我来说似乎是合理的,但每一个都增加了一个难度维度,特别是Bitmap.recycle,需要在操作和Activity销毁期间调用(注意onDestroy,甚至onStop可能不会被调用).
这也排除了依赖SoftReferences,它可能会处理其他一些问题.
是的,这是必要的,或者即使在任何数量的gc,sleep(20s,偶数),yield和try-catch中的大量数组分配(强制控制的低内存情况)之后我得到OutOfMemoryError.
搜索"OutOfMemoryError:位图大小超过VM预算"或"android位图回收".
是的,我正在重新采样位图.

android lazy-loading bitmap adapter recycle

11
推荐指数
0
解决办法
584
查看次数

Sqlite查询一列中的多个值

我想在表中查询字段id,其中一些值如1,5,4,11,它们将根据选择来自前一个屏幕.

cursor = database.query(tablename,
                    new String[] { "TopName" }, "id =?", new String[]{"2,3"}, null, null, null);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到游标计数0,新的String [] {"2"}我得到的值我想要的所有id的字符串数组中的值像OR那样在该列中有值.

sqlite android

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

更改文本颜色Spinner项目显示

我使用简单的游标适配器为微调器设置适配器,因为我使用了sqlite数据库.但我无法自定义微调器的字体颜色,

图片

这是我的微调器的Url有深红色背景我想使用简单的光标适配器与spinner android将文本颜色更改为白色

代码:

    Cursor cursor = dbAdapter.getAllData();

    if(cursor.getCount()>0){
    String[] from = new String[]{"columm_name"};
    // create an array of the display item we want to bind our data to
    int[] to = new int[]{android.R.id.text1};
    SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, from, to);

    mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerName.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)

android spinner

0
推荐指数
1
解决办法
4992
查看次数

使用整数创建表作为主键不起作用而不是android

我正在尝试使用整数作为主键创建表,但它不起作用.这是错误:

11-02 11:17:24.833:ERROR/AndroidRuntime(4781):引起:android.database.sqlite.SQLiteException:接近"0":语法错误:CREATE TABLE tremp_db(0 INTEGER PRIMARY KEY AUTOINCREMENT,date TEXT,time TEXT ,重复TEXT,gamish TEXT,src_city TEXT,src_area TEXT,dest_city TEXT,dest_area TEXT,price TEXT,TEXT,phone TEXT,email TEXT,text TEXT,update_time TEXT);

有人知道究竟是什么问题?

感谢名单...

这是代码:

public class Data
{
    private static String DATABASE_NAME = new String("db_carpool.db");
    public static final int DATABASE_VERSION = 7; 
    public static String TABLE_NAME = new String("tremp_db");
    public static int ID;
    public static String DATE = new String("date");
    private static String TIME = new String("time");
    private static String REPEAT = new String("repeat");
    private static String GAMISH = …
Run Code Online (Sandbox Code Playgroud)

database sqlite android

0
推荐指数
1
解决办法
2682
查看次数

标签 统计

android ×4

sqlite ×2

adapter ×1

bitmap ×1

database ×1

lazy-loading ×1

recycle ×1

spinner ×1