`
dingran
  • 浏览: 372405 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Dialog中的一个函数的源码分析

 
阅读更多

这个函数是从Dialog.java里找到的:

/**
     * @return The activity associated with this dialog, or null if there is no assocaited activity.
     */
    private ComponentName getAssociatedActivity() {
        Activity activity = mOwnerActivity;
        Context context = getContext();
        while (activity == null && context != null) {
            if (context instanceof Activity) {
                activity = (Activity) context;  // found it!
            } else {
                context = (context instanceof ContextWrapper) ?
                        ((ContextWrapper) context).getBaseContext() : // unwrap one level
                        null;                                         // done
            }
        }
        return activity == null ? null : activity.getComponentName();
    }

 函数的作用是找到与Dialog关联的Activity的ComponentName,这个复杂的判断逻辑吸引了我,所以把它拿出来分析分析。

 

这个函数为什么要分析Activity和Context的区分呢,我想可能是在Activity里new这个dialog的时候,有的人是用this来代替this.getApplicationContext()吧,猜测呵呵。如果是的话那么确实会有很大区别。

 

当然更主要的是Activity是继承自Context的才导致了这个复杂的判断,呵呵

 

从下面的函数的注释来看,判断这个Dialog的所有者即Activity是为了万一要用到声音控制:

 

/**
     * Sets the Activity that owns this dialog. An example use: This Dialog will
     * use the suggested volume control stream of the Activity.
     *
     * @param activity The Activity that owns this dialog.
     */
    public final void setOwnerActivity(Activity activity) {
        mOwnerActivity = activity;
       
        getWindow().setVolumeControlStream(mOwnerActivity.getVolumeControlStream());
    }

 

下面这个也能验证我的一个猜测,即Dialog未必都是从Activity里制造出来的,所以才会有返回值是NUll的情况

 

/**
     * Returns the Activity that owns this Dialog. For example, if
     * {@link Activity#showDialog(int)} is used to show this Dialog, that
     * Activity will be the owner (by default). Depending on how this dialog was
     * created, this may return null.
     *
     * @return The Activity that owns this Dialog.
     */
    public final Activity getOwnerActivity() {
        return mOwnerActivity;
    }

 

 

 

分享到:
评论

相关推荐

    FCKEditor 一款开源的非常优秀的WEB在线编辑器

    但这也恰恰暴露了更多的安全隐患,参考了各大网站的应用,简化为仅一个显示文本和一个链接地址 这部分功能的源代码主要分布在两个文件中: UI部分 /editor/dialog/fck_link.html 功能函数 /editor/dialog/fck_...

    基于SIP开发软件电话的一些资源(转自YOUTOO)

    熟悉后再一个函数一个函数地深入学习exosip提供的接口函数,就可以深入理解osip 了,达到间接学习oSIP的目的,同时也能从eXoSIP中学习到正确使用oSIP的良好的编程风格和语法格式。 而要成功编译...

    Visual C++ 编程资源大全(源码 窗体)

    (2KB)<END><br>107,bhagat.zip 使用一个简单的函数调用就可以在切分视图中动态创建任何类型的新视图。(64KB)<END><br>108,MSDNWnd.zip 这是一个MSDN中的切分窗口的例子,虽不怎么样但已经完整展示了切分操作。...

    FFmpeg基础库编程开发

    9.3.4 Mplayer源码分析 429 第十章 开发实例 436 第十一章 mp4文件封装协议分析 436 11.1 概述 436 11.2 mp4的物理结构 436 11.3 数据的组织结构 437 11.4 mp4的时间结构 437 11.5 文件结构分析 438 11.5.1 File ...

    asp.net知识库

    [ASP.NET 2.0]PageParser.GetCompiledPageInstance中存在一个Bug 如何在DotNet 2的登录组件中检索用户的锁定状态及解锁? ASP.NET 2.0, 想说爱你不容易 SqlDataSource WEB控件:当DeleteCommandType= 遭遇 ASP.NET ...

    再谈 CFileDialog 对话框的定制(代码更新)VC源代码

    “一个定制CFileDialog对话框的实例”,此文示范了如何定制“打开”文件对话框,通过调用 GetItemText 函数直接从列表中获得选中的文件名, 有心的读者肯定会留意,在这篇文章的最后作者留下一个不大不小的尾巴........

    基于YOLOv5实现的道路交通标志识别系统源码(含GUI)+项目使用说明+模型及评估指标曲线.zip

    这是一个关于yolov5的道路标志识别项目,使用Pyqt5开发界面,Yolov5训练模型,数据库Mysql,包含五个模块:初始化参数、标志识别、数据库、数据分析和图像处理。 1、标志识别模块 左下角三个勾选框分别是结果保存、...

    ffmpeg基础开发资料自总结

    9.3.4 Mplayer 源码分析 409 第十章 开发实例 416 第十一章 mp4 文件封装协议分析 416 11.1 概述 416 11.2 mp4 的物理结构 416 11.3 数据的组织结构 417 11.4 mp4 的时间结构 417 11.5 文件结构分析 418 11.5.1 File...

    ATL实现的CDHtmlDialog模板类

    <br>基于这个原因,通过理解分析MFC中CDHtmlDialog类的功能和实现行为,这里完全使用ATL一样的实现机制来模仿MFC中实现的功能编写了一个头文件,使ATL爱好者在无需MFC庞大的支持库的情形下实现跟CDHtmlDialog...

    VeryIDE Apps 应用程序集 v1.5.6 UTF8.rar

    新增 广告统计分析中对微软Bing(必应)搜索引擎的识别支持 新增 Flash图片轮换广告形式,支持多图自动切换 新增 广告主JS文件迷你(Mini)调用文件,去掉了不必要功能,减少文件大小 新增 专题系统增加幻灯片模块,用来...

    VeryIDE Apps 应用程序集 v1.5.6 GBK.rar

    新增 广告统计分析中对微软Bing(必应)搜索引擎的识别支持 新增 Flash图片轮换广告形式,支持多图自动切换 新增 广告主JS文件迷你(Mini)调用文件,去掉了不必要功能,减少文件大小 新增 专题系统增加幻灯片模块,用来...

    C#开发典型模块大全

    4.2.1 如何制作一个接口程序 80 4.2.2 实现接口程序的信息互传 80 4.2.3 如何将接口程序加载到其他程序中 82 4.2.4 怎样操作RichtextBox控件的选择文本 82 4.2.5 如何获取数据表中字段的描述信息 83 4.3 ...

    Java典型模块

    3.6.3 编写一个自己的加载器 3.7 动态代理 3.7.1 什么是代理 3.7.2 动态代理基础类 3.7.3 InvocationHandler接口 3.7.4 动态代理类的设计模式 3.8 小结 第2篇 线程开发 第4章 学生并发接水(线程Thread) 4.1 学生...

    网络架构师148讲视频课程

    │ 第67节:分析如何使用Memcached开发.avi │ 第68节:Memcached结合业务功能开发.avi │ 第69节:Nginx+Varnish+基本业务功能+Memcached.avi │ 第70节:应用Memcached后的体系结构.avi │ 第71节:ActiveMQ入门和...

Global site tag (gtag.js) - Google Analytics