如何在本地有效地保存Drawables?

时间:2015-08-25 19:25:39

标签: android api

我正在提取像这样的Drawable:

List<ResolveInfo> appsList;
appsList = pm.queryIntentActivities(new Intent(Intent.ACTION_MAIN)
                .addCategory(Intent.CATEGORY_LAUNCHER),0);

然后:

    Drawable drawableIcon;
    Bitmap icon;
    File file;
    ResolveInfo ri;
    for (int i = 0; i < appsList.size(); i++) {
        ri = appsList.get(i);
        drawableIcon = ri.loadIcon(pm);

        //METHOD to convert Drawable to Bitmap
        icon=drawableToBitmap(drawableIcon);
        try {
            file=new File(context.getFilesDir(),ri.activityInfo.packageName);
            FileOutputStream fos = new FileOutputStream(file);
            icon.compress(Bitmap.CompressFormat.PNG,100,fos);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

我正在检索和设置图像:

        someView.setImageBitmap(BitmapFactory.decodeFile(context.getFilesDir()+"/"+cachingClass.appsList.get(position).activityInfo.packageName));

其中

  

位置

是一个变化的整数,

  

someView

是一个ImageView

  1. 虽然它工作正常,但不知怎的,我正在寻找一种方法 直接保存Drawables而不将它们转换为Bitmap,和 然后使用someView.setImageDrawable()代替。
  2. 我可以用序列化的方式来做,如果是的话,这是个好主意吗?
  3. getFilesdir(),getCacheDir()或SQLite或任何其他内容。假设50-200张大小为2-10 KB的图像,保存和检索的最快方法是什么;

1 个答案:

答案 0 :(得分:1)

  

不知何故,我正在寻找一种方法来直接保存Drawables而不将它们转换为Bitmap

您无法保留DrawableDrawable是一个界面。

  

我可以用序列化的方式吗

Drawable的某些实现可能是Serializable

  

这是一个好主意吗?

我怀疑它会起作用,更不用说可靠地工作了。不过,我们当然欢迎您试用它。

  

保存和检索的最快方法是什么

我会从不保存开始。考虑到您的副本在任何时候都可能过时(例如,应用更新),我无法看到您首先将这些内容写入磁盘的价值。当您需要图标时,请从PackageManager

获取

如果您认为将这些映像保存到磁盘是必要的,那么简单的磁盘I / O就像您正在做的那样,应该比SQLite事务更快。