ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Android Studio使用structure分析源码

2020-12-13 13:58:26  阅读:231  来源: 互联网

标签:实例 mMap Bundle 源码 Studio Intent Android intent 键值


分析 以下代码实际上做了什么?

1.Intent intent= new Intent(MainActivity.this, AActivity.class);//获取类名
2.intent.putExtra("xcj","123");

1.首先打开Intent的源码(在下载了源码包的前提下,使用ctrl+左键点击Intent就可以看到源码),如下:
在这里插入图片描述
显然,这是一个Intent的构造方法(无返回类型),从structure处可以看到是否有其他的构造方法
你不知道如何打开structure?如下:然后会在侧边栏出现structure,以后只需要点击这里就好了
在这里插入图片描述
然后查看红色圆圈m中的(m表示method),该类中的所有方法(包括构造方法)都会显示在这里
在这里插入图片描述
2.这里先讲解一下structure的使用
在这里插入图片描述
p为Properties(属性),f为field(字段)
属性和字段的区别:属性有get和set方法,如下:
属性action有getAction()和setAction方法来进行赋值操作,事实上,属性和字段不都是一个变量(或常量)吗,为什么要区分二者?你可以这样想:这是为了防止开发者错误赋值带来的不安全性,也就是相当于对开发者的提醒,源码没有给你提供get和set方法的变量不要去赋值(也就是说你虽然可以去赋值,但是很可能会引发一些问题)
在这里插入图片描述
下面这个锁表示 显示非公开的内容,选上,不然private等修饰的内容都看不到
在这里插入图片描述
3.继续分析Intent
在这里插入图片描述
该Intent需要两个参数,这里传入两个类,又将其给了那么ComponentName(packageContext, cls),那它做了什么,
在这里插入图片描述
显然,它获取了类名,并付给了mPackage和mClass,因此可以知道new ComponentName(packageContext, cls);这个实例中有两个存储了类名的变量,这个实例赋给了mComponent,则通过mComponent.mPackage和mComponent.mClass就可以获取类名,那么就可以通过intent.mComponent.mPackage和intent.mComponent.mClass获取类名。
总结:

Intent intent= new Intent(MainActivity.this, AActivity.class);//获取类名

这条语句获取了MainActivity和AActivity的类名
4.分析

intent.putExtra("xcj","123");

同样查看源码:
在这里插入图片描述
首先看Bundle是什么?一层一层往下看,从这里还是不知道它做了什么,看他调用的父类构造方法:super();
在这里插入图片描述
在该方法中从注释中可以看出他是创建了一个空Bundle,继续看this,这是BaseBundle类的调用其实例的构造方法,往下看
在这里插入图片描述
注释中的意思:
构造一个新的空包,该包使用特定的类加载器
实例化可打包和可序列化对象。
@param loader实例化对象时要使用的显式类加载器
包里面。
@param capacity ArrayMap的初始大小
可以知道这里创建了一个capacity大小的ArrayMap用于存储键值对,并赋给了mMap,显然我们可通过mMap.put()来给mMap进行键值对的添加,也就是可以通过Bundle的实例 bundle.mMap.put()来给mMap进行键值对的添加,看完了Bundle进行一下总结
在这里插入图片描述
总:new Bundle()创建了一个实例,在实例主要进行了 Bundle实例下的变量mFlags 的赋值(暂时不知道有啥作用),以及 Bundle实例下的变量mMap 创建了一个ArrayMap<String, Object>,以及 Bundle实例下的变量 mClassLoader进行赋值,(这些变量有Bundle类继承自其父类),最后该Bundle实例赋给了mExtras,则可以通过mExtras.mMap.put();来给mMap添加键值对。

那么再来看mExtras.putString(name, value);做了什么 。
在这里插入图片描述
先不管unparcel();看到mMap.put()就已经知道他给mMap添加了键值对

最后总结第二条语句做了什么。

intent.putExtra("xcj","123");

该语句将键值对"xcj"和"123"储存到Bundle类的实例mExtras中了,而mExtras是intend的一个变量,也就是将该键值对储存到intent中去了,显然,在内部,可以通过intent.mExtras.mMap.get()来获取该键值对。

总:以上全部都只是在分析以下两句代码实际上做了什么,了解它是怎么做的,在分析其他源码的时候可以采取同样的办法

Intent intent= new Intent(MainActivity.this, AActivity.class);//获取类名
 intent.putExtra("xcj","123");

标签:实例,mMap,Bundle,源码,Studio,Intent,Android,intent,键值
来源: https://blog.csdn.net/xcj1409385086/article/details/111098735

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有