返回顶部
首页 > 资讯 > 精选 >Android面试Intent采用的设计模式是什么
  • 459
分享到

Android面试Intent采用的设计模式是什么

2023-07-05 09:07:47 459人浏览 泡泡鱼
摘要

这篇文章主要介绍了Android面试Intent采用的设计模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android面试Intent采用的设计模式是什么文章都会有所收获,下面我们一起来看看吧。正文答

这篇文章主要介绍了Android面试Intent采用的设计模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android面试Intent采用的设计模式是什么文章都会有所收获,下面我们一起来看看吧。

    正文

    答案是采用了原型模式

    原型模式的好处在于方便地拷贝某个实例的属性进行使用、又不会对原实例造成影响,其逻辑在于对 Cloneable 接口的实现。

    Intent 的关键源码

     // frameworks/base/core/java/android/content/Intent.java public class Intent implements Parcelable, Cloneable {     ...     private static final int COPY_MODE_ALL = 0;     private static final int COPY_MODE_FILTER = 1;     private static final int COPY_MODE_HISTORY = 2;      @Override     public Object clone() {         return new Intent(this);     }      public Intent(Intent o) {         this(o, COPY_MODE_ALL);     }      private Intent(Intent o, @CopyMode int copyMode) {         this.Maction = o.mAction;         this.mData = o.mData;         this.mType = o.mType;         this.mIdentifier = o.mIdentifier;         this.mPackage = o.mPackage;         this.mComponent = o.mComponent;         this.mOriginalIntent = o.mOriginalIntent;         ...          if (copyMode != COPY_MODE_FILTER) {             ...             if (copyMode != COPY_MODE_HISTORY) {                 ...             }         }     }     ... }

    可以看到 Intent 实现的 clone() 逻辑是直接调用了 new 并传入了自身实例,而非调用 super.clone() 进行拷贝。

    默认的拷贝策略是 COPY_MODE_ALL,顾名思义,将完整拷贝源实例的所有属性进行构造。其他的拷贝策略是 COPY_MODE_FILTER 指的是只拷贝跟 Intent-filter 相关的属性,即用来判断启动目标组件的 action、data、type、component、cateGory 等必备信息。

    无视启动 flag、bundle 等数据

     // frameworks/base/core/java/android/content/Intent.java public class Intent implements Parcelable, Cloneable {     ...     public @NonNull Intent cloneFilter() {         return new Intent(this, COPY_MODE_FILTER);     }      private Intent(Intent o, @CopyMode int copyMode) {         this.mAction = o.mAction;         ...          if (copyMode != COPY_MODE_FILTER) {             this.mFlags = o.mFlags;             this.mContentUserHint = o.mContentUserHint;             this.mLaunchToken = o.mLaunchToken;             ...         }     } }

    中拷贝策略是 COPY_MODE_HISTORY

    不需要 bundle 等历史数据,保留 action 等基本信息和启动 flag 等数据。

     // frameworks/base/core/java/android/content/Intent.java public class Intent implements Parcelable, Cloneable {     ...     public Intent maybeStripForHistory() {         if (!canStripForHistory()) {             return this;         }         return new Intent(this, COPY_MODE_HISTORY);     }      private Intent(Intent o, @CopyMode int copyMode) {         this.mAction = o.mAction;         ...          if (copyMode != COPY_MODE_FILTER) {             ...             if (copyMode != COPY_MODE_HISTORY) {                 if (o.mExtras != null) {                     this.mExtras = new Bundle(o.mExtras);                 }                 if (o.mClipData != null) {                     this.mClipData = new ClipData(o.mClipData);                 }             } else {                 if (o.mExtras != null && !o.mExtras.isDefinitelyEmpty()) {                     this.mExtras = Bundle.STRIPPED;                 }             }         }     } }

    总结起来:

    Copy Modeaction 等数据flags 等数据bundle 等历史
    COPY_MODE_ALLYESYESYES
    COPY_MODE_FILTERYESNONO
    COPY_MODE_HISTORYYESYESNO

    Android 源码中还有很多地方采用了原型模式

    除了 Intent,Android 源码中还有很多地方采用了原型模式。

    Bundle 也实现了 clone(),提供了 new Bundle(this) 的处理:

     public final class Bundle extends BaseBundle implements Cloneable, Parcelable {     ...     @Override     public Object clone() {         return new Bundle(this);     } }

    组件信息类 ComponentName 也在 clone() 中提供了类似的实现:

     public final class ComponentName implements Parcelable, Cloneable, Comparable<ComponentName> {     ...     public ComponentName clone() {         return new ComponentName(mPackage, mClass);     } }

    工具IntArray 亦是如此:

     public class IntArray implements Cloneable {     ...     @Override     public IntArray clone() {         return new IntArray(mValues.clone(), mSize);     } }

    原型模式也不一定非得实现 Cloneable,提供了类似的实现即可。比如:

    Bitmap 没有实现该接口但提供了 copy(),内部将传递原始 Bitmap 在 native 中的对象指针并伴随目标配置进行新实例的创建:

     public final class ComponentName implements Parcelable, Cloneable, Comparable<ComponentName> {     ...     public Bitmap copy(Config config, boolean isMutable) {         ...         noteHardwareBitmapSlowCall();         Bitmap b = nativeCopy(mNativePtr, config.nativeInt, isMutable);         if (b != null) {             b.setPremultiplied(mRequestPremultiplied);             b.mDensity = mDensity;         }         return b;     } }

    关于“Android面试Intent采用的设计模式是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Android面试Intent采用的设计模式是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

    本文标题: Android面试Intent采用的设计模式是什么

    本文链接: https://lsjlt.com/news/350764.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • Android面试Intent采用的设计模式是什么
      这篇文章主要介绍了Android面试Intent采用的设计模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android面试Intent采用的设计模式是什么文章都会有所收获,下面我们一起来看看吧。正文答...
      99+
      2023-07-05
    • Android面试Intent采用了什么设计模式解析
      目录正文Intent 的关键源码无视启动 flag、bundle 等数据中拷贝策略是 COPY_MODE_HISTORYAndroid 源码中还有很多地方采用了原型模式正文 答案是采...
      99+
      2023-03-06
      Android面试Intent设计模式 Android面试 Android Intent
    • 工作中的设计模式门面模式是什么意思
      这篇文章主要介绍“工作中的设计模式门面模式是什么意思”,在日常操作中,相信很多人在工作中的设计模式门面模式是什么意思问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”工作中的设计...
      99+
      2024-04-02
    • android intent的作用是什么
      Android Intent是Android系统中的一个重要组件,用于实现不同组件之间的通信和交互。它可以用于启动Activity、...
      99+
      2023-10-25
      android intent
    • Android设计模式SOLID六大原则是什么
      本篇内容主要讲解“Android设计模式SOLID六大原则是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android设计模式SOLID六大原则是什么”吧!单一职责原则定义定义:确保单例类...
      99+
      2023-06-25
    • C++设计模式中的桥模式是什么
      这篇文章主要介绍了C++设计模式中的桥模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。单一职责模式:在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是...
      99+
      2023-06-29
    • java设计模式的策略模式是什么
      这篇文章主要介绍“java设计模式的策略模式是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java设计模式的策略模式是什么”文章能帮助大家解决问题。策略模式亦称:Strategy意图策略模式是...
      99+
      2023-07-02
    • 设计模式之什么是工厂模式
      本篇内容主要讲解“设计模式之什么是工厂模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“设计模式之什么是工厂模式”吧! 01 简单工厂方法简单工厂方法...
      99+
      2024-04-02
    • Java设计模式的建造者模式是什么
      这篇文章主要介绍了Java设计模式的建造者模式是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式的建造者模式是什么文章都会有所收获,下面我们一起来看看吧。1、什么是建造者模式?我们知道在软件开...
      99+
      2023-06-29
    • Python设计模式中的状态模式是什么
      这篇文章将为大家详细讲解有关Python设计模式中的状态模式是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。状态模式状态模式,当对象的内部状态发生了改变的时候,允许对象执行不同的流程。优点:封装了状态...
      99+
      2023-06-29
    • Java中什么是设计模式
      这篇文章给大家介绍Java中什么是设计模式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,用来表示整数的数据类型。2、浮点类型,用来表示小数的数据类型。...
      99+
      2023-06-14
    • C# Observer设计模式是什么
      这篇文章主要讲解了“C# Observer设计模式是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C# Observer设计模式是什么”吧!我们来看一个新的范例,因为有很多相关的内容,所...
      99+
      2023-06-17
    • JavaScript中设计模式是什么
      这篇文章主要介绍了JavaScript中设计模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。设计模式是任何优秀软件的基础,JavaScript 也不例外,学习设计模式...
      99+
      2023-06-20
    • JavaScript5大常用设计模式是什么
      本篇内容主要讲解“JavaScript5大常用设计模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript5大常用设计模式是什么”吧!设计模...
      99+
      2024-04-02
    • Java中设计模式的面试题有哪些
      这篇文章将为大家详细讲解有关Java中设计模式的面试题有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。面试题1:面向对象程序设计(OOP)的六大原则分别有哪几个开闭原则(Open Close Prin...
      99+
      2023-06-20
    • java设计模式中的责任链模式是什么
      本篇文章为大家展示了java设计模式中的责任链模式是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一:模式说明模式定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。...
      99+
      2023-06-22
    • PHP常用六大设计模式是什么
      本文小编为大家详细介绍“PHP常用六大设计模式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP常用六大设计模式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。单例模式特点:三私一公:私有的静态变量...
      99+
      2023-06-30
    • 什么是Thread-Per-Message设计模式
      这篇文章主要讲解了“什么是Thread-Per-Message设计模式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是Thread-Per-Message设计模式”吧!并发编程的核心是什...
      99+
      2023-06-15
    • PHP八大设计模式是什么
      这篇文章主要介绍了PHP八大设计模式是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。PHP命名空间可以更好地组织代码,与Java中的包类似。Test1.php<ph...
      99+
      2023-06-15
    • java八大设计模式是什么
      Java八大设计模式是指GOF(Gang of Four)提出的23种设计模式中的一部分,这些设计模式可以帮助开发者解决在软件设计过...
      99+
      2023-08-31
      java
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作