大多数开发人员都意识到PDB文件有助于您进行调试,但仅此而已.如果你不知道PDB文件是怎么回事,不要觉得很糟糕,因为虽然有文档在那里,但它分散在周围,而且大部分是为编译器和调试器编写器准备的.虽然编写编译器和调试器非常酷和有趣,但这可能不是你的工作.我想做的是把每个在微软操作系统上进行开发的人都必须知道的PDB文件放在一个地方.这些信息也适用于本机开发人员和托管开发人员,不过我将提到一个特定于托管开发人员的技巧.我将从讨论PDB文件存储和内容开始.由于调试器使用PDB文件,我将详细讨论调试器如何…
这个系列的文章一共8篇,我酝酿了很多年,参考了很多资源,查看了很多源码,直到今天把它写出来,也是战战兢兢,生怕什么地方写错了,贻笑大方. (一)引言 早在我还是Android菜鸟的时候,有很多技术我都不太明白,也都找不到答案,比如apk是怎么安装的,比如资源是怎么加载的. 再比如说,每本书都会讲AIDL,但我却从来没用过.四大组件也是这个问题,我只用过Activity,其它三个组件,不但没用过,甚至连它们是做什么的,都不是很清楚. 之所以这样,是因为我一直从事的是电商类App开发工作,对于这类A…
(五)AMS 如果站在四大组件的角度来看,AMS就是Binder中的Server. AMS全称是ActivityManagerService,看字面意思是管理Activity的,但其实四大组件都归它管.估计是Android底层开发人员先写了ActivityManagerService用来管理Activity,后来写Service.Receiver.CP的时候发现代码都差不多,于是就全都用ActivityManagerService,但是却忘记改名字了——我也是猜的,纯属八卦. 由此而说到了插件化…
(七)App启动流程第2篇 书接上文,App启动一共有七个阶段,上篇文章篇幅所限,我们只看了第一阶段,接下来讲剩余的六个阶段,仍然是拿斗鱼App举例子. 简单回顾一下第一阶段的流程,就是Launcher向AMS发送一个跨进程通信,通过AMN/AMP,告诉AMS,我要启动斗鱼App. 画一个图,描述一下启动App所经历的7个阶段: 第2阶段 AMS处理Launcher传过来的信息 这个阶段主要是Binder的Server端在做事情.因为我们是没有机会修改Binder的Server端逻辑的,所以这个…
(十)Service Service有两套流程,一套是启动流程,另一套是绑定流程.我们做App开发的同学都应该知道. 1)在新进程启动Service 我们先看Service启动过程,假设要启动的Service是在一个新的进程中,分为5个阶段: 1)App向AMS发送一个启动Service的消息. 2)AMS检查启动Service的进程是否存在,如果不存在,先把Service信息存下来,然后创建一个新的进程. 3)新进程启动后,通知AMS说我可以啦. 4)AMS把刚才保存的Service信息发送给…
(十一)BroadcastReceiver BroadcastReceiver,也就是广播,简称Receiver. 很多App开发人员表示,从来没用过Receiver.其实吧,对于音乐播放类App,用Service和Receiver还是蛮多的,如果你用过QQ音乐,App退到后台,音乐照样播放不会停止,这就是你写的Service在后台起作用. 在前台的Activity,点击停止按钮,就会给后台Service发送一个Receiver,通知它停止播放音乐:点击播放按钮,仍然是发送这个Receiver,…
(十二)ContentProvider (1)ContentProvider是什么? ContentProvider,简称CP. 做App开发的同学,尤其是电商类App,对CP并不熟悉,对这个概念的最大程度的了解,也仅仅是建立在书本上,它是Android四大组件中的一个. 做系统管理类的App,比如说手机助手这种,有机会频繁使用CP. 而对于应用类App,数据通常存在服务器端,其它应用类App也想使用的时候,一般都是从服务器取数据,所以没机会使用到CP. 有时候我们会在自己的App中读取通信录或…
(十)PMS及App安装过程 PMS,全称PackageManagerService,是用来获取Apk包的信息的. 在前面分析四大组件与AMS通信的时候,我们介绍过,AMS总是会使用PMS加载包的信息,将其封装在LoadedApk这个类对象中,然后我们就可以从中取出在manifest声明的四大组件信息了. (一) 在下载并安装App的过程,会把Apk存放在data/app目录下. Apk是一个zip压缩包,在文件头会记录压缩包的大小,所以后续在文件尾巴就算是追加一部小电影,也不会对解压造成影响—…
# Build and Object Folders bin/ obj/ # Nuget packages directory packages/ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # User-specific files *.suo *.user *.sln.docstates # Build resu…
现实中,服务器在向浏览器发送的数据中,一部分数据是不经常更新的,如果能将这部分数据缓存到浏览器端,将会大大降低传输的数据,提高应用的性能.通过Expires策略,可以使用HTTP 协议定义的缓存机制将数据缓存到浏览器中.下面我们看看Net是如何实现将数据缓存到浏览器中的. protected void Page_Load(object sender, EventArgs e) { if (Request.Headers["If-Modified-Since"] != null &…