`

在DocumentUI中的Recent(最近)列表无法显示图片的缩略图

阅读更多
今天客户提了一个bug说在短信添加附件,界面无法显示缩略图。接到这个bug我第一反应是缩略图生成失败了。

1.复现问题
1)在自己手上的版本无法复现该问题,再详细确认客户所处的分支,发现客户的分支与自己的不一致。

2)找与客户对应的分支的测试机器,复现只有当在Recent最近这个页面不能显示缩略图,其他页面都可以正常显示

2.通过Monitor—Hierarchy View工具查看Recent页面找到显示图片的icon的id为:icon_mime_lg.在DocumentUI搜索icon_mime_lg,定位到代码GridDocumentHolder.java

@Override
    public void bind(Cursor cursor, String modelId) {
        assert(cursor != null);

        mModelId = modelId;

        mDoc.updateFromCursor(cursor, getCursorString(cursor, RootCursorWrapper.COLUMN_AUTHORITY));

        mIconHelper.stopLoading(mIconThumb);

        mIconMimeLg.animate().cancel();
        mIconMimeLg.setAlpha(1f);
        mIconThumb.animate().cancel();
        mIconThumb.setAlpha(0f);

        mIconHelper.load(mDoc, mIconThumb, mIconMimeLg, mIconMimeSm);

icon加载图片的调用是mIconHelper.load

3.查看IconHelper中load的方法
public void load(Uri uri, String mimeType, int docFlags, int docIcon, long docLastModified,
            ImageView iconThumb, ImageView iconMime, @Nullable ImageView subIconMime) {
        boolean loadedThumbnail = false;

        final String docAuthority = uri.getAuthority();

        final boolean supportsThumbnail = (docFlags & Document.FLAG_SUPPORTS_THUMBNAIL) != 0;
        final boolean allowThumbnail = (mMode == MODE_GRID)
                || MimeTypes.mimeMatches(MimeTypes.VISUAL_MIMES, mimeType);
        final boolean showThumbnail = supportsThumbnail && allowThumbnail && mThumbnailsEnabled;	
        if (showThumbnail) {
            loadedThumbnail =
                loadThumbnail(uri, docAuthority, docLastModified, iconThumb, iconMime);
        }

        final Drawable mimeIcon = getDocumentIcon(mContext, docAuthority,
                DocumentsContract.getDocumentId(uri), mimeType, docIcon);
        if (subIconMime != null) {
            setMimeIcon(subIconMime, mimeIcon);
        }
        if (loadedThumbnail) {			
            hideImageView(iconMime);
        } else {
            // Add a mime icon if the thumbnail is not shown.
            setMimeIcon(iconMime, mimeIcon);
            hideImageView(iconThumb);
        }
    }

在如上方法加入debug信息,发现不管是在Recent页面还是其他页面都会走loadThumbnail,只有在Recent页面时showThumbnail为false,在其他页面为true.说明缩略图加载的,只是显示和不显示的问题,进一步分析发现在Recent页面时mThumbnailsEnabled未false,而在其他页面为true.而该值是通过public void setThumbnailsEnabled(boolean enabled)设置的

4,通过搜索setThumbnailsEnabled得知是在DirectoryFragment.java调用
 boolean svelte = am.isLowRamDevice() && (mState.stack.isRecents());
        mIconHelper.setThumbnailsEnabled(!svelte);


5,查看ActivityManager中的
    /**
     * Returns true if this is a low-RAM device.  Exactly whether a device is low-RAM
     * is ultimately up to the device configuration, but currently it generally means
     * something in the class of a 512MB device with about a 800x480 or less screen.
     * This is mostly intended to be used by apps to determine whether they should turn
     * off certain features that require more RAM.
     */
    public boolean isLowRamDevice() {
        return isLowRamDeviceStatic();
    }


    /** @hide */
    public static boolean isLowRamDeviceStatic() {
        return RoSystemProperties.CONFIG_LOW_RAM ||
                (Build.IS_DEBUGGABLE && DEVELOPMENT_FORCE_LOW_RAM);
    }


6.通过adb shell getprop ro.config.low_ram 返回true.

7,结论当设备配置ro.config.low_ram为true时,并且处于Recent页面,则不显示icon.App可以通过ActivityManager的isLowRamDevice API来判断当前设备是否是low ram。



分享到:
评论

相关推荐

    10.0任务列表获取缩略图

    "10.0任务列表获取缩略图"是一个关于如何在Android 10.0版本中实现类似Android 7.0 UI的任务列表缩略图加载的技术点。这个功能涉及到系统的用户界面库、特定的Java类以及相关的资源文件。 首先,`SystemUISharedLib...

    10.0任务列表获取缩略图,获取最近任务,仿7.0UI,直接引入加载即可.zip

    这个压缩包文件主要涉及到的是Android应用开发中的任务列表展示,特别是针对Android 10.0系统,它提供了获取任务缩略图、获取最近任务的功能,并且界面设计是模仿了Android 7.0的用户界面风格。以下是这个项目可能...

    Thumbnails Anywhere这款插件可以帮助你在首页、任意日志页都可以看到随机缩略图效果

    •调用日志内容中的图片,显示日志缩略图,缩略图链接指向原日志或者原大图。 •随机缩略图:调用随机日志的缩略图,全站任意位置显示。 •最新缩略图:调用最新日志的缩略图,全站任意位置显示。 •相关缩略图:...

    NC-Thumbnails-for-Recent-Posts:NC缩略图用于最新帖子是一个WordPress小部件插件,可在每个最新帖子条目旁边显示缩略图,并支持您选择的自定义帖子类型

    如何使用安装插件并访问“小部件”屏幕查找小部件“最近帖子的NC缩略图” 将小部件添加到区域填写小部件的可选标题设置要显示的帖子数选择要显示的帖子类型(默认为“帖子”) 选择是否显示日期选择是否在每个条目...

    VB RecentFiles Editor

    VB的默认设置会在启动时显示最近打开过的工程,随着时间推移,这个列表可能会积累大量不再需要或者已经过时的项目,给用户带来不必要的困扰。VB RecentFiles Editor就是为了帮助用户清理和管理这个列表,提供一个...

    QT----recentfiles

    在QT中,RecentFiles通常指的是应用程序可以保存并显示用户最近打开或操作过的文件列表,以便快速访问。 在QT的GUI设计中,“action”和“toolbutton”是两个关键概念。Action是QT中的一个类,代表用户界面中的可...

    # 获取Windows最近使用记录并显示文件路径(源代码)

    资源主要是结合博客文章:...在运行(Ctrl+R)输入recent能显示最近浏览文件记录,该过程采用VS2012 C#开发,向下不兼容.是很好的基础性文章,希望结合博客阅读.免费资源,仅供大家学习.希望对大家有所帮助.

    Recent Comments插件

    WordPress最近留言插件,可以提供一个高度定制的差距,用来显示您的访客在侧栏的最近评论,输出的样式完全可以根据你自己喜欢的样式进行自定义。 Recent Comments插件的特点: •widget样式:可以定义每个边栏放置...

    C# 清理 Recent 文件.txt

    在Windows操作系统中,“最近使用的文件”(Recent Files)是一个用于存储用户最近打开过的文档路径的功能。尽管这个功能方便了用户快速访问最近的工作内容,但随着时间积累,Recent文件夹会变得非常庞大,从而占用...

    git-recent, 查看最新的本地git分支,格式化的真正 fancy.zip

    git-recent, 查看最新的本地git分支,格式化的真正 fancy 最新 git键入 git recent 以查看最新的本地git分支用法 git recent 在使用 Windows 时,你需要使用或者类似的,以便有效地使用这个实用程序。安装你可以将 ...

    recent_contacts:在邮件撰写中显示最近的联系人

    插件recent_contacts 使用 jQueryUI ( BETA ) 在邮件撰写中显示最近的联系人安装 : 在圆形立方体安装的插件文件夹中下载插件。 将“recent_contacts”(如果尚未定义,则为+“jqueryui”)添加到cfg 文件中的$...

    Clear the Recent Documents list

    标题中的“Clear the Recent Documents list”指的是在操作系统中清除最近打开文档的历史记录。这个功能对于保护用户隐私和保持系统整洁非常有用,因为最近使用的文档列表可能会显示敏感信息或个人文件。在Windows...

    Keep recent file

    "Keep recent file" 是一个关于记录最近使用的文档的示例项目,主要针对Windows应用程序开发,尤其是使用Visual C++(VC)进行的编程。这个项目旨在实现一个自定义的最近使用文件(Most Recently Used, MRU)列表,...

    Atom-recent-files-fuzzy-finder,快速查找最近打开的文件的atom包.zip

    这个 "Atom-recent-files-fuzzy-finder" 插件的核心特性是模糊查找,模糊查找允许用户输入部分文件名或者关键词,插件会根据输入的内容快速匹配并显示最近打开的文件列表。这种方式比传统的文件查找方法更高效,尤其...

    使用Echarts显示最近一月销量折线图.rar

    总结来说,使用 ECharts 显示最近一月销量折线图的过程包括:准备数据、选择合适的 Python 库、处理数据、配置 ECharts 图表以及生成 HTML 渲染结果。通过 `pyecharts` 这个库,Python 开发者可以方便地利用 ECharts...

    android 获取最近应用

    在Android系统中,获取最近使用的应用是开发过程中一个常见的需求,这可以帮助用户快速回溯到他们之前的操作,或者为你的应用程序提供个性化推荐。本篇将详细介绍如何在Android中实现这一功能。 首先,我们需要理解...

    computed tomography principles design artifacts and recent advances

    computed tomography principles design artifacts and recent advances 下载

    使用Echarts显示最近一周销量折线图.rar

    在这个"使用Echarts显示最近一周销量折线图"的例子中,我们将探讨如何利用Python处理数据并用ECharts来生成动态的销售量折线图。 首先,我们需要获取最近一周的销售数据。这通常涉及到从数据库、CSV文件或其他数据...

    recent:一个命令行实用程序,可帮助您导航到最近使用的文件夹

    "recent"的基本用法是直接在命令行输入 `recent`,它将显示你最近访问过的文件夹列表。你可以通过这个列表选择一个你想要跳转的文件夹,通常只需要输入文件夹名的部分内容,然后按回车即可。这个功能类似于浏览器的...

Global site tag (gtag.js) - Google Analytics