- 博客(17)
- 收藏
- 关注
原创 反编译简单介绍
Java作为一种编程语言,提供了很多语法糖,如泛型、自动装箱与拆箱等,而这些语法糖Java虚拟机是不认识的,所以在javac编译的时候,就会进行解糖,而得到的class文件中就是解糖后的代码,这时候我们把这种解糖后的class文件进行反编译,就可以得到一份java文件,从这份java文件中,我们就可以学习到这些语法糖到底是如何实现的。其中有的人会说汉化,没错,汉化的方式确实就是将一个APK进行反编译,然后翻译其中的资源再重新打包,但是不管怎么说这仍然是将别人的程序进行破解,这并不是什么光荣的事情。
2023-10-16 10:41:19 877 1
原创 Android 组件化框架设计
随着APP版本不断的迭代,新功能的不断增加,业务也会变的越来越复杂,APP业务模块的数量有可能还会继续增加,而且每个模块的代码也变的越来越多,这样发展下去单一工程下的APP架构势必会影响开发效率,增加项目的维护成本,每个工程师都要熟悉如此之多的代码,将很难进行多人协作开发,而且Android项目在编译代码的时候电脑会非常卡,又因为单一工程下代码耦合严重,每修改一处代码后都要重新编译打包测试,导致非常耗时,最重要的是这样的代码想要做单元测试根本无从下手,所以必须要有更灵活的架构代替过去单一的工程架构。
2023-10-16 10:21:55 168 1
原创 Android Service
Service启动方式,一个是启动服务,另一个是绑定服务。绑定服务,bind的方式开启服务,绑定服务,调用者挂了,服务也会跟着挂掉。接下来将在上面的基础用法上,增设“与Activity通信”的功能,即使用绑定Service服务(Binder类、bindService()、onBind()、unbindService()、onUnbind())2)、使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。2.在配置文件里声明;
2023-10-13 13:45:42 106
原创 Android Content Provider
(1)android平台提供了Content Provider使一个应用程序的指定数据集提供给其他应用程序。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据。(2)只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它的好处是统一数据访问方式。(3)ContentProvider实现数据共享。ContentProvider用于保存和获取数据,并使其对所有应用程序可见。
2023-10-13 11:25:38 139
原创 Android Broadcast Receive
有序广播是一种同步执行的广播,广播发出之后,优先级高的广播接收器就可以先接收到广播消息,执行完该广播接收器的逻辑后,可以选择截断正在传递的广播或者继续传递,如果广播消息被截断,之后的广播接收器则无法收到广播消息。为此,Android v4兼容包中给出了封装好的LocalBroadcastManager类,用于统一处理App应用内的广播问题,使用方式上与通常的全局广播几乎相同,只是注册/取消注册广播接收器和发送广播时将主调context变成了LocalBroadcastManager的单一实例。
2023-10-13 11:20:35 83
原创 Android ANR机制
在该条log之后会有CPU usage的信息,表明了CPU在ANR前后的用量(log会表明截取ANR的时间),从各种CPU Usage信息中大概可以分析如下几点:(1). 如果某些进程的CPU占用百分比较高,几乎占用了所有CPU资源,而发生ANR的进程CPU占用为0%或非常低,则认为CPU资源被占用,进程没有被分配足够的资源,从而发生了ANR。其中的time,是在最开始startServiceLocked函数中判断出前/后台进程,然后装在ServiceRecord中,一路传过来的。
2023-10-13 11:17:14 679
原创 Android系统框架
隐藏在每个应用后面的是一系列的服务和系统,其中包括:视图(Views)、内容提供器(ContentProviders)、资源管理器(ResourceManager)、通知管理器(NotificationManager)、活动管理器(ActivityManager)。Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。Android系统架构分为四层架构,从高到低分别是应用层,应用框架层,系统运行层和Linux内核层。
2023-10-13 11:08:11 40
原创 Android Event Log
日志是极好的,可以及时记录程序的运行状态信息,和出现异常的时候的异常状态信息,是程序运行的后知后觉的晴雨表。它可以给我们查找问题指明方向,带来查找问题的便利。因此,可以读懂Android Event Log显得很重要。为了让您可以懂它,使用它,我来做一个小小总结。
2023-10-13 11:06:47 1496
原创 Android启动过程
由于IO操作的过程中,写入文件并非立刻就会真正意义上写入物理磁盘,以及在写入文件的过程中还可能中断或者出错等原因的考虑,采用的策略是先将老的文件package-usage.list,重命为增加后缀package-usage.list.bak;PM.reboot最终也就是setprop sys.powerctl,那么谁来监听sys.powerctl 值呢,是init没错是init,接下来重点介绍init,//根据haltMode 区分,reboot,shutdown,rebootsafemode。
2023-10-13 11:05:28 317
原创 Android ActivityManagerService (AMS)
AmS—ActivityManagerService.java,android系统服务,Activity管理的服务端,用于管理activity的各种行为,控制activity的生命周期,派发消息事件,低内存管理等。这里传入的service就是AMS,将它保存到ArrayList类型的mServices中完成注册,最后调用了service.onStart(),从上一步可知,最后调用的是AMS的start()。这里首先通过反射的方式创建了service,并调用了它的构造,最后调用()。
2023-10-13 11:03:07 159
原创 Android Vibrator
调用timed_output框架提供的timed_output_dev_register()接口将我们的马达驱动注册进系统,这里的关键就是我们需要自定义struct timed_output_dev结构体,填充enable和get_time函数。代码比较简单,提供接口给驱动在"/sys/class/timed_output/"路径下面建立自己的节点,并提供节点的device attribute的操作接口,当我们写节点的时候就会调用到enable_store函数,并调用注册驱动的enable函数。
2023-10-13 10:57:07 376
原创 IPC之Binder
服务端Binder,当Service接收到client请求后,会调用BBinder的taransact方法会调回子类实现的虚拟方法onTransact,该方法实现是在BnXXXservice中实现,所以BBinder就是接受传递过来的信息,解包数据,并调用XXXservice真正的实现。CPU将指令分为特权指令和非特权指令,对于危险的指令,比如清内存等,这种指令只允许操作系统及其相关模块使用,普通应用只能使用普通指令,所以Ring3级别被运行在用户态,Ring0级别被成为运行在内核态。
2023-10-13 10:43:45 76
原创 synchronized实现原理
欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入MarkdownText-to-HTMLAuthorsJohnLuke。
2023-10-12 17:10:26 40
原创 String、StringBuilde、StringBuffer区别
String、StringBuilde、StringBuffer区别String不可变性StringBuilder可变字符串,线程不太安全,但效率高,推荐使用。StringBuffer可变字符串,线程安全,但效率低,不推荐使用。1)StringBuilder效率高,线程不安全,StringBuffer效率低,线程安全。2)String是不可变字符串,StringBuilder是可变字符串。为什么有这样的差异,可以深入源码去解析,比如String类内的 priver final char v
2021-11-28 23:35:44 354
原创 Java基本类型及运算符优先级
java八种基本数据类型Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。 8 中类型表示如下:简单类型字节二进制位数(位)封装类型byte18Byte
2020-10-05 18:52:02 955
原创 JAVA-新的开始-新的起点
新的开始-新的起点引自《边城浪子》开篇-红雪:夕阳照着他的脸。他脸上的轮廓英俊而突出,但却像是远山上的冰雪塑成的。夕阳暗淡,风在呼啸。地上的红雪带出了《边城浪子》的开篇,简单的HelloWord打开了编程世界大门,走进Java走进了一个世界。在这个世界里,磨练你的都是宝贵的经验,学的越多不会的越多,但懂得和熟悉的也越来越多。注意Java是大小写敏感的:public class HelloWorld { /* 第一个Java程序 * 它将打印字符串 Hello World
2020-10-04 20:08:00 176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人