基于android2.3.5系统:explicit关键字应用方法详解

安卓应用开发环境 本文会持续更新修改,主要记录在安卓应用开发中,遇到的一些问题和解决方案。 阅读详情

***************************************************************************************************************************
作者:EasyWave                                                                                 时间:2013.02.24

类别:Android系统源码分析                                                              声明:转载,请保留链接

注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

在Android2.3.5中,我经常看到explicit这个关键字,开始对explicit关键字,不是很熟悉,对于C++我也是刚刚熟悉没有多久,所以还有很多的知识点,需要去了解。所以从网络上,搜索关于explicit关键字的用法,现在以Android的string8为例,来解释explicit关键字的作用。在C++中, explicit关键字用来修饰类的构造函数,表明该构造函数是显式的,既然有"显式"那么必然就有"隐式",那么什么是显示而什么又是隐式的呢?如果c++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象,如下面所示:

那么如何使用和定义呢?还是以下面的例子来说明吧:

class intClass  
{ 
	public:  intClass( int num );  
 
}  
//.  
intClass obj = 10; //ok,convert int to intClass


在上面的代码中编译器自动将整型转换为intClass类对象,实际上等同于下面的操作:

intClass temp(10);  
intClass obj = temp; 

上面的C++ explicit关键字相关的操作即是所谓的"隐式转换"。如果要避免这种自动转换的功能,该怎么做呢?这就是关键字explicit的作用,将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit即可,这样就可以防止这种自动的转换操作,如果我们修改上面的intClass类的构造函数为显式的。

那么上面的intClass obj = 10; 在Android中的实例为bluetooth的代码如下:

总结:

C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。如果要避免这种自动转换的功能,我们需要关键字explicit将类的构造函数声明为"显式",也就是在声明构造函数的时候前面添加上explicit,这样就可以防止这种自动的转换操作。


 

 

我的Android进阶之旅------>如何解决Android 5.0中出现的警告: Service Intent must be explicit: 摘要 本文分析了在Android 5.1系统上运行时出现的"Service Intent must be explicit"错误。该错误是由于从Android 5.0(Lollipop)开始,系统要求必须使用显式Intent启动Service。错误发生在调用startService()时,当Intent未设置Component或Package属性时,系统会抛出IllegalArgumentException异常。文中通过分析Android源码(ContextImpl.java)展示了具体 阅读详情

相关推荐

IIC协议常见误区解析:从时序图到实际波形(附逻辑分析仪实测)

本文深入解析IIC协议在实际应用中的常见误区,从理想时序图到逻辑分析仪实测波形的差异,揭示通信故障的根本原因。通过硬件设计优化、软件时序调优和高级调试技巧,帮助开发者有效规避IIC通信中的隐形陷阱,提升系统稳定性。

weixin_28738397的博客 370

Android “Service Intent must be explicit”解决办法

Android 5.0以后出现“Service Intent must be explicit”解决办法在需要隐式启动Service时,发现报错“Service Intent must be explicit”,查看源码发现,Android 5.0以后google禁止隐式启动Service。以下是源码:private void validateServiceIntent(Intent service

CJ的博客 1278

避开内存陷阱:手把手教你用RKNN零拷贝接口正确管理输入输出Tensor

本文深入解析RKNN零拷贝接口在边缘计算中的高效内存管理策略,通过YOLOX实例演示如何避免内存对齐错误和数据错位。详细介绍了`rknn_tensor_mem`系列API的正确使用方法,包括内存创建、绑定、释放全流程,以及性能优化技巧如内存池技术和多核NPU负载均衡,帮助开发者提升推理效率并避开常见陷阱。

weixin_33686714的博客 160

Android 广播介绍

android 广播介绍 一 广播的分类 1.有序广播 有序广播是指广播发送后,广播接收器会根据优先级先后接收到发送的广播。 优点:先接收到广播的广播接收器可截断该广播,让优先级低的广播接收器接收不到该广播。 缺点: 广播效率低 2.标准广播 标准广播,也叫无序广播,是指广播发送后,广播接收器几乎在同一时间接收到该广播。 优点:广播效率高 缺点:广播无法被截断 二 广播的定义 广播的定义需要继承BroadcastReceiver类,重写里面的onReceive方法,也就是当接收到广播时需要做什么。 publ

kakakk_k的博客 3778

探索Vortex开源GPGPU:RISC-V SIMT架构(2),指令Decode

本文分析了Vortex RISC-V内核的Decode模块设计。文章详细介绍了指令译码过程,包括操作码、功能码和寄存器字段的提取,以及不同类型指令(R/I/S/B/U/UJ)的立即数处理。重点阐述了基于操作码和功能码的分层译码逻辑,包括ALU运算、分支跳转、系统调用等指令的译码规则。此外,还描述了定制指令的处理机制以及与调度器的握手协议。Decode模块通过组合逻辑实现快速译码,并将结果传递给下级Issue模块,同时协调指令流控制。

weixin_55313207的博客 1793

飞行器坐标转换

本文定义的是右手直角坐标系,x−y−zx-y-zx−y−z轴分别为北-天-东。从AAA坐标系到BBB坐标系是分别绕y−z−xy-z-xy−z−x轴,即天-东-北旋转ψ−θ−γψ−θ−γ。如果AAA是惯性系,BBB是机体系,则这三个角度分别为偏航角、俯仰角、横滚角。图1 惯性系到机体系。

gongfuyd的博客 1355

android基础学习之implicit Intent,explicit Intent

Explicit intent 显示意图:不传数据 startActivity(new Intent(this,EastActivity.class));传数据 intent.putExtra(key,value) //以键值对的形式放入bundle集合中 @src Bunlde( A mapping from String keys to various {@link Parcelable} ...

lxg20090501的博客 671

自抗扰控制(ADRC)理论与工程实践:8.2 模糊ADRC、神经网络ADRC等智能融合变体

智能融合ADRC变体概述 自抗扰控制(ADRC)与智能控制方法(如模糊逻辑、神经网络)的融合,旨在突破传统ADRC在非线性、时变系统中的应用局限。智能融合ADRC主要通过以下方式实现性能提升: 模糊ADRC 参数自整定:利用模糊推理在线调节ADRC带宽参数,实现自适应控制。 非线性反馈:用模糊控制器替代线性PD,灵活设计非线性控制策略。 优势:融入专家经验,无需精确模型;局限:依赖规则库设计,稳定性分析困难。 神经网络ADRC 增强ESO:用神经网络学习扰动动态,提高估计精度。

技术工作者 228

android gc打印日志,Android logCat 里面一直打印GC_EXPLICIT ,界面有反应迟钝的现象。...

已经大半年不碰Android了,以下是一些记忆中的经验,供参考。首先确实是内存问题,这些都是DalvikVM的GC日志,格式如下:[GC原因] [释放了多少VM内存], [VM堆内存统计], [外部内存统计], [VM暂停时间]其中[原因]的内容可以参考Android源码中/dalvik/vm/alloc/Heap.h中enum GcReason的定义:typedef enum {/* Not e...

weixin_36230541的博客 576

有效Dk值提取方法的仿真分析

通过本文的仿真对比分析,提取有效Dk值方面,TDR技术在一些固定的场景下,依然有其参考应用价值,而随着VNA功能的不断增强和高精度测量手段的不断更新,双端口Delta-L技术才是主流评估方法,而单端口Delta-L技术则可以作为其降本增效的方案补充。

一只豌豆象的博客 1827

实战优化!C#上位机串口通信卡顿问题:超时机制+数据缓存方案

串口名</param>/// <param name="baudRate">波特率

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1065

explicit 关键字修饰构造函数

经常我们看到,修饰构造函数的一种关键字  explicit 表示生成对像是需要显示调用构造函数。 如下例: 无explicit #include using namespace std; class B { public: B(){cout<<"constructor"<<endl;} B(int i):data(i){} ~B(){cout<<"~destructor"<<en

998

《使用R包ggtree进行进化树的绘制与美化》

都2023年了,才去使用Y叔早在2018年发表的进化树构建利器——ggtree。刚好最近在做基因家族分析,进化树的构建与美化确实有点麻烦,先前使用MEGA11进行了绘制,但图像简陋,于是导出了nwk文件,准备使用其他软件进行美化。这里,我使用ggtree包进行操作。

沉香best的博客 6898

C++中explicit的作用及用法

仅含一个参数的构造函数和除了第一个参数外其余参数都有默认值的多参构造函数承担了两个角色。 是个构造函数;2 .是个默认且隐含的类型转换操作符。 explicit是个C++关键字,其作用是指定仅有一个参数或除第一个参数外其它参数均有默认值的类构造函数不能作为类型转化操作符被隐含的使用,防止该类的对象直接被对应内置类型隐式转化后赋值,从而规定这个构造函数必须被明确调用。 我们通过例子来直观的说明 #include <iostream> using namespace std; class A

干啥啥不行,但是也要干的博客 1319

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C++ explicit关键字详解

首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子: class CxString  // 没有使用explicit

jack_20的博客 246

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Service Intent must be explicit的两种解决方法

crash的原因是5.0以上service不能使用隐式intent启动,但是使用AIDL进行进程间通信时并不能得到具体的类名,so, 问题还得解决。 方法一 最简单的是新建Intent的时候带入packagename,直接调用setPackage方法,把service所在的包名设置进intent。 Intent intent = new Intent(); intent.setAction("com.boomstack.aidl"); intent.s

u013297881的专栏 5180

Service Intent must be explicit的解决方法

今天在学习android的Service组件的时候,在AndroidMainfest.xml中定义了 <service android:name=".BindService" android:enabled="true" android:exported="true" >

laoxu的专栏 5万+

Service组件 Android 5.0中出现的警告:Service Intent must be explicit

在学习Service组件时,按照书上的例子的,写好,运行点击后,应用闪退,后台报错 去网上找了下,发现是因为android 5.0存在的问题,正好我编译程序的sdk是5.0.1的。 Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动。 而andr

阿俊的博客 431

如何解决Android 5.0中出现的警告:Service Intent must be explicit

有些时候我们使用Service的时需要采用隐私启动的方式,但是Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示方式启动。 而android源码是这样写的(源码位置:sdk/sources/android-21/android/app/ContextImpl.jav

vrix的专栏 2万+

android 5.0系统 Service Intent must be explicit

android 5.0系统 Service Intent must be explicit android 5.0系统后,Service 从隐式启动改为了显示启动 Intent intent = new Intent(); intent.setAction("XXX.XXX.XXX");//你定义的service的action intent.setPac

fydsw1314的专栏 1307

【Android高级】查看手机及应用内存状况的方法

查看手机及应用内存状况的方法

将来的你 8595

解决Android 5.0版本之后出现的异常:Service Intent must be explicit

java.lang.IllegalArgumentException: Service Intent must be explicit异常修复: 有些时候我们使用Service的时需要采用隐私启动的方式,但是Android 5.0一出来后,其中有个特性就是Service Intent  must be explitict,也就是说从Lollipop开始,service服务必须采用显示

Delion 1677

如何解决Android 5.0中出现的警告: Service Intent must be explicit:

1.错误描述 今天在Android4.4 的小米4手机上运行我的程序的时候没有报错,而在Android 5.1的华为P7上运行我的程序的时候报了以下的错误,错误提示如下: E/AndroidRuntime(12500): FATAL EXCEPTION: main E/AndroidRuntime(12500): Process: com.xtc.watch, PID: 12500 E/A

qq_15796477的博客 466

Android 5.0 Service Intent must be explicit

Android 5.0程序运行报Service Intent must be explicit错误,原因是5.0的service必须显式调用 改成 Intent intent = new Intent(mContext, IService.class); 或者 Intent intent = new Intent("com.xx.xx.Service").setPackage("xx.xx.x

ff313976的专栏 8386

安卓应用开发中 Android 11+ 软件包可见性问题详解

Android 11+ 引入的软件包可见性限制要求应用在访问其他应用信息时需显式声明。本文详细分析了这一变更的原因、受影响API及具体解决方案。开发者需在AndroidManifest.xml中添加<queries>元素,通过包名或Intent过滤器声明需要交互的应用,同时提供了分享、支付等常见场景的适配示例。文章强调不建议滥用QUERY_ALL_PACKAGES权限,并给出了兼容性处理建议。这一限制旨在保护用户隐私,开发者需根据实际业务需求合理声明可见性权限。

深山技术宅的博客 973
上一篇: 基于android2.3.5系统:Android中native层C++单例模式
下一篇: 基于Linux开源VOIP系统LinPhone[四]
wang-bob
博客等级 码龄20年 356粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值