Android业务组件化之URL Scheme使用

本文介绍了URL Scheme在Android中的基本概念、应用场景及其实现方法,包括如何在AndroidManifest.xml中配置Scheme,如何解析Scheme参数以及如何从外部调用等。

前言:

     最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在预研阶段,很有必要先了解一下URL Scheme,看看是如何使用的?其实在之前做Hybrid混合编程的时候就接触过URL Scheme,总来的来说还不算陌生,今天就来回顾总结一下。业务组件化相关博客地址(Android业务组件化之现状分析与探讨

   业务组件化相关文章地址:

什么是 URL Scheme?

    android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

URL Scheme应用场景:

    客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用。通过指定的 URL 字段,可以让应用在被调起后直接打开某些特定页面,比如商品详情页、活动详情页等等。也可以执行某些指定动作,如完成支付等。也可以在应用内通过 html 页来直接调用显示 app 内的某个页面。综上URL Scheme使用场景大致分以下几种:

  • 服务器下发跳转路径,客户端根据服务器下发跳转路径跳转相应的页面
  • H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
  • APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
  • APP根据URL跳转到另外一个APP指定页面

URL Scheme协议格式:

   先来个完整的URL Scheme协议格式:

xl://goods:8888/goodsDetail?goodsId=10011002

通过上面的路径 Scheme、Host、port、path、query全部包含,基本上平时使用路径就是这样子的。

  • xl代表该Scheme 协议名称
  • goods代表Scheme作用于哪个地址域
  • goodsDetail代表Scheme指定的页面
  • goodsId代表传递的参数
  • 8888代表该路径的端口号

URL Scheme如何使用:

 1.)在AndroidManifest.xml中对<activity />标签增加<intent-filter />设置Scheme
复制代码
    <activity
            android:name=".GoodsDetailActivity"
            android:theme="@style/AppTheme">
            <!--要想在别的App上能成功调起App,必须添加intent过滤器-->
            <intent-filter>
                <!--协议部分,随便设置-->
                <data android:scheme="xl" android:host="goods" android:path="/goodsDetail" android:port="8888"/>
                <!--下面这几行也必须得设置-->
                <category android:name="android.intent.category.DEFAULT"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
        </activity>
复制代码
 2.)获取Scheme跳转的参数
复制代码
Uri uri = getIntent().getData();
if (uri != null) {
    // 完整的url信息
    String url = uri.toString();
    Log.e(TAG, "url: " + uri);
    // scheme部分
    String scheme = uri.getScheme();
    Log.e(TAG, "scheme: " + scheme);
    // host部分
    String host = uri.getHost();
    Log.e(TAG, "host: " + host);
    //port部分
    int port = uri.getPort();
    Log.e(TAG, "host: " + port);
    // 访问路劲
    String path = uri.getPath();
    Log.e(TAG, "path: " + path);
    List<String> pathSegments = uri.getPathSegments();
    // Query部分
    String query = uri.getQuery();
    Log.e(TAG, "query: " + query);
    //获取指定参数值
    String goodsId = uri.getQueryParameter("goodsId");
    Log.e(TAG, "goodsId: " + goodsId);
}
复制代码
3.)调用方式

网页上

<a href="xl://goods:8888/goodsDetail?goodsId=10011002">打开商品详情</a>

原生调用

  Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
  startActivity(intent);
 4.)如何判断一个Scheme是否有效
复制代码
PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xl://goods:8888/goodsDetail?goodsId=10011002"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
    startActivity(intent);
}
复制代码

总结:

   Scheme的基本使用也就这么多了,其他的使用在以后用到的时候再做总结。

干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!


权衡 PFC 和 LLC 电感磁芯选择时,需要综合考虑多个方面: - **工作特性适配**:PFC 电路主要用于功率因数校正,工作在连续导通模式(CCM)或不连续导通模式(DCM)。CCM 模式下,电流连续,要求磁芯能承受较高的直流偏置,环状磁芯具有较好的直流偏置特性,能在较大直流电流下保持较低的磁导率变化,可减少电感值的波动,适合 PFC 电感。LLC 谐振变换器工作在谐振状态,其电流为正弦波,对磁芯的高频特性和损耗要求较高。EE 型磁芯的绕组结构有利于降低绕组损耗,且磁路中的气隙分布更均匀,能更好地适应 LLC 电路的高频工作特性 [^1]。 - **磁路需求考量**:磁路的完整性和磁阻是重要因素。环状磁芯的磁路闭合,漏磁小,能有效减少电磁干扰(EMI),对于需要严格控制 EMI 的电源系统,环状磁芯是 PFC 电感的良好选择。而 EE 型磁芯中间柱可设置气隙,方便调整磁导率和存储能量,满足 LLC 电感在谐振过程中对能量存储和释放的要求 [^1]。 - **实际工程优化目标**:包括成本、尺寸和散热等。环状磁芯的绕线工艺相对复杂,成本较高,但体积小,适合对空间要求严格的应用。EE 型磁芯结构简单,绕线方便,成本较低,且散热性能较好,在对成本敏感和散热需求较大的设计中,EE 型磁芯更适合 LLC 电感 [^1]。 - **性能指标评估**:需要评估磁芯的饱和磁通密度、磁导率、损耗等参数。PFC 电感在高功率应用中,要求磁芯具有较高的饱和磁通密度,以避免磁饱和。LLC 电感则更关注磁芯在高频下的损耗,低损耗的磁芯能提高变换器的效率 [^1]。 ```python # 以下为简单的磁芯选择评估示例代码 # 假设 1 代表环状磁芯,2 代表 EE 型磁芯 # 定义评估函数,根据不同指标权重进行评分 def core_selection(pfc_dc_bias, pfc_emi, llc_high_freq_loss, llc_cost): pfc_score_ring = pfc_dc_bias * 0.4 + pfc_emi * 0.3 pfc_score_ee = (1 - pfc_dc_bias) * 0.4 + (1 - pfc_emi) * 0.3 llc_score_ring = (1 - llc_high_freq_loss) * 0.4 + (1 - llc_cost) * 0.3 llc_score_ee = llc_high_freq_loss * 0.4 + llc_cost * 0.3 pfc_choice = 1 if pfc_score_ring > pfc_score_ee else 2 llc_choice = 1 if llc_score_ring > llc_score_ee else 2 return pfc_choice, llc_choice # 示例输入,假设各项指标值在 0 到 1 之间 pfc_dc_bias = 0.8 # PFC 直流偏置适应性,值越高越好 pfc_emi = 0.7 # PFC 电磁干扰控制,值越高越好 llc_high_freq_loss = 0.2 # LLC 高频损耗,值越低越好 llc_cost = 0.3 # LLC 成本,值越低越好 pfc_choice, llc_choice = core_selection(pfc_dc_bias, pfc_emi, llc_high_freq_loss, llc_cost) print(f"PFC 电感选择磁芯类型: {'环状' if pfc_choice == 1 else 'EE 型'}") print(f"LLC 电感选择磁芯类型: {'环状' if llc_choice == 1 else 'EE 型'}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值