添码星空
码到成功
展开
-
Android开发知识体系总章
FlutterFlutter常见插件 用了这个插件后,Flutter开发更简单了!Java基础 Java Object类方法 HashMap原理,Hash冲突,并发集合,线程安全集合及实现原理 HashMap 和 HashTable 区别 HashCode 作用,如何重载hashCode方法 ArrayList与LinkList区别与联系 Java反射机制 Java代理模式及三种方式 Java泛型 Synchron原创 2022-04-05 09:52:31 · 207 阅读 · 0 评论 -
android中的EventLog
调试分析Android时,经常需要查看EventLog,了解当前Activity状态和window的信息等等。本文就列举以下am相关的tags含义。 本文涉及的源码类有EventLog.java、EventLogTags.java,另外tags格式的定义位于文件/system/etc/event-log-tags。如果在终端输入:logcat -b events那么会输出大量类似这样的信息:06-01 13:44:55.518 7361 8289 I am_create...原创 2022-04-03 19:00:28 · 1109 阅读 · 0 评论 -
解析ViewRootImpl
一、View 通过 ViewRootImpl 来绘制 ViewRootImpl 是一个视图层次结构的顶部,在上一篇文章中我们知道了 ViewRootImpl 实现了 View 与 WindowManager 之间所需要的协议,作为 WindowManagerGlobal 中大部分的内部实现。这个好理解,在 WindowManagerGlobal 中实现方法中,都可以见到 ViewRootImpl,也就说 WindowManagerGlobal 方法最后还是调用到了 ViewRootIm...原创 2022-03-19 18:41:27 · 1399 阅读 · 0 评论 -
Activity、Window、View 之间的关系
Activity 启动后就可看到我们写的 Layout 布局界面,Activity 从 setContentView() 到显示中间做了什么呢?下面我们就来分析下这个过程。本文主要对于以下问题进行分析:Window 是什么?Activity 与 PhoneWindow 与 DecorView 之间什么关系?原创 2022-03-13 16:59:58 · 104 阅读 · 0 评论 -
Tombstone文件分析
当一个动态库(native 程序)开始执行时,系统会注册一些连接到debuggerd 的signal handlers,当系统 crash 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等。原创 2022-03-13 16:42:29 · 1070 阅读 · 0 评论 -
谈谈ActivityStackSupervisor,ActivityStack,ActivityRecord,TaskRecord的关系
在AMS分析和activity的启动流程时候,经常碰到ActivityStackSupervisor、ActivityStack、ActivityRecord、TaskRecord,现在对它们统一梳理一下。1.简介先来张简单的关系图:原创 2022-03-06 19:11:05 · 267 阅读 · 0 评论 -
Alpha测试、Beta测试和验收测试的含义与区别
1、Alpha测试 Alpha测试是由用户在开发环境下进行的测试,也可以是开发机构内部的用户在模拟实际操作环境下进行的测试。开发者坐在用户旁边,这是在开发者受控的环境下进行的测试。由开发者随时记录下错误情况和使用中的问题。2、Beta测试 Beta测试是由软件的多个用户在一个或多个用户的实际使用环境下进行的测试。开发者通常不在测试现场,这是在开发者无法控制的环境下进行的测试。由用户记录下遇到的所有问题,定期向开发者报告。beta测试是一模拟真实的使用环境从而发现缺陷的一种测试...原创 2022-03-06 18:17:54 · 3625 阅读 · 0 评论 -
史上最全依赖注入框架Dagger介绍
一、依赖注入Dagger的作用 我想这是许多人的困惑。为什么不直接new一个对象。 而是通过配置各式各样的注解达到new的目的?看了许许多多的文章,都指向一个观点,一切是为了解耦。 从需求的角度 比如业务类UserService(UserApi api) . 需要构造这个函数。一开始实例化简单,但是随着业务的跟进你需要保存一些用户设置,构造函数加入SharedPreferences。随着构造函数的数量不断增加,就会变得越来越累赘,并且又是多人合作,依赖别人写的对象。改...原创 2021-10-17 09:12:26 · 1224 阅读 · 0 评论 -
Java接口与实现类的转换
1、接口不能直接实例化对象一开始学习接口就知道它与类的区别:接口不能用于实例化对象。但是可以在 Java 中,使用接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。public interface TestInterface{}TestInterface testInterface = new TestInterface();//这种肯定是不允许的2、实现接口的子类可以通过创建对象赋值给接口接口不能实例化,用接口的实现类可以实例化,将实现类的对象在内存中的地址原创 2021-06-24 17:00:36 · 3680 阅读 · 0 评论 -
ActivityManagerService的理解
ActivityManagerService的理解原创 2021-06-17 20:36:53 · 163 阅读 · 0 评论 -
白盒测试和黑盒测试的区别
白盒测试:是指实际运行被测程序,通过程序的源代码进行测试而不使用用户界面。这种类型的测试需要从代码句法发现内部代码在算法、溢出、路径和条件等方面的缺点或者错误,进而加以修正。白盒测试把测试对象看作一个打开的盒子。黑盒测试:又称功能测试、数据驱动测试或基于规格说明的测试,是通过使用整个软件或某种软件功能来严格地测试,,而并没有通过检查程序的源代码,或者很清楚地了解该软件的源代码程序具体是...原创 2020-02-06 16:45:09 · 65498 阅读 · 2 评论 -
Activity启动流程
1.startActivity()通过Instrumentation向AMS进程发起startActivity()请求2.AMS收到启动请求后,由ActivityStarter处理Flags和Intent信息,然后再由ActivityStackSuper visor和ActivityStack处理Task和Stack流程3.原创 2021-06-07 15:31:47 · 124 阅读 · 0 评论 -
Framework概略
。所以Android也需要运行环境,需要Linux内核在启动完成后加载Android Framework运行所需要的资源。当Framework完成初始化后才能继续启动相应的APK应用程序。一、Framework启动分析Framework运行的第一个Java虚拟机进程为zygote(对应具体程序为app_process,该程序位于system/bin目录下),zygote是APK应用程序的父进程,此后所有的虚拟机进程都由zygote创建。zygote有两个功能:接受请求创建新的Dalvik进程共享类原创 2021-06-03 20:57:53 · 100 阅读 · 0 评论 -
面试官:为什么 Activity.finish() 之后 10s 才 onDestroy ?
https://zhuanlan.zhihu.com/p/340362623原创 2021-01-11 16:20:13 · 338 阅读 · 0 评论 -
taskAffinity 属性详解
taskAffinity 属性详解一、本文目的本篇文章的目的是为了 搞清楚,哪些情况下开启一个 Activity 会在新的 task 运行,哪些情况下会继续在原来的task 运行。二、相关基础知识知识点 1每个 Activity 运行时都有一个其归属的 task栈,我们可以用 activity.getTaskId() 的方法得到当前 activity 的taskId。如果两个 activity 的 taskId 不同,则他们肯定不会属于同一个 task。为了方便,我们在 Application原创 2020-12-18 10:34:25 · 914 阅读 · 0 评论 -
Handler机制终极梳理
Handler机制终极、彻底的梳理,附源码分析和实例剖析!看完醍醐灌顶、豁然开朗!原创 2020-12-12 18:51:41 · 118 阅读 · 0 评论 -
浅析有趣的分屏
Android N,Android N新增了不少功能,最受关注的自然就是分屏了。这一功能对国内的很多手机用户并不陌生,其实很多第三方系统早已经实现了这一功能,如EMUI,Flyme等等。转存失败重新上传取消分屏操作在我的手机中,就可以一边看视频,一边浏览简书。Android N分屏功能的更新,似乎并不会对我国第三方Android系统带来多大的影响。毕竟厂商有自己实现这一功能的套路。...原创 2020-04-17 13:24:30 · 211 阅读 · 0 评论 -
关于Android Gradle
为什么需要学Gradle?Gradle 是 Android 现在主流的编译工具,虽然在Gradle 出现之前和之后都有对应更快的编译工具出现,但是 Gradle 的优势就在于它是亲儿子,Gradle 确实比较慢,这和它的编译过程有关,但是现在的Gradle 编译速度已经有了成倍提高。除此之外,相对其他编译工具,最重要的,他和 Android Studio 的关系非常紧密,可以说对于一些简单的程...原创 2020-04-12 14:28:43 · 143 阅读 · 0 评论 -
浅析WIFI模块
一:什么是WIFIWIFI是一种无线连接技术,可用于手机、电脑、PDA等终端。WIFI技术产生的目的是改善基于IEEE802.11标准的无线网络产品之间的互通性,也就是说WIFI是基于802.11标准的,但WIFI不等同无线网络。二:Android平台下的WIFI模块简单介绍一下,WIFI模块的基本功能:1. 开关WIFI除了在WIFI设置界面可以开关WIFI,还有其他的方法可以...原创 2020-04-11 16:25:15 · 986 阅读 · 0 评论 -
AS编写运行测试纯java代码,带main()函数
问题小伙伴们在做安卓项目的时候,是不是有时候会忘记某些api的使用方法,不太确定他们的结果是怎样的,需要写一些测试代码,验证看看我们的写法是否正确。刚开始的时候我是在页面上写一个Button,添加点击事件,在onClick()里面调用测试代码,每次测试都需要安装apk,点击按钮,查看Logcat打印是否正确。这样非常麻烦,也耗费很多时间。毕竟时间很宝贵,我就在想,能不能在Android Stu...原创 2020-02-19 15:01:14 · 1158 阅读 · 3 评论 -
Android中Activity界面的启动流程
原创 2020-02-02 19:41:31 · 188 阅读 · 0 评论 -
adb (cmd)常用调试命令(陆续更新)
目录Android adb (cmd)常用调试命令记录 (持续学习中不定时更新记录.一、文件拷贝到 android 设备指定文件夹二、system 文件夹添加 读写权限三、/system/app 使用 chmod 修改文件夹权限四、android 设备 system 目录获得读写 rw 权限的方法五、android 设备的连接、断开、显示连接设备,重启设备,修改设备分辨率,...原创 2020-01-11 15:38:46 · 2444 阅读 · 0 评论 -
谈Activity的启动模式
Android 的四种Activity启动模式standard:默认模式,允许多实例 singleTop:相比于standard,有新的启动请求时,只有在目标Activity处于当前栈顶时,才会调用onNewIntent()而不创建新实例,其他情况都和standard一致 singleTask:设置了singleTask启动模式的Activity,它在启动的时候,会先在系统中查找属性值af...原创 2019-12-19 17:10:50 · 125 阅读 · 0 评论 -
Android之网络相关
1. 计算机网络的分层按照不同组织的标准和规范,可以有不同的分层方式OSI七层应用层、表示层、会话层、运输层、网络层、数据链路层、物理层TCP/IP(四层)应用层、传输层、网络层、网络接口层五层协议应用层:为操作系统或网络应用程序提供访问网络服务的接口;通过应用进程间的交互来完成特定网络应用,应用层协议定义的是应用进程间通信和交互规则。不同的网络应用层有不同的...原创 2019-12-17 20:13:44 · 246 阅读 · 0 评论 -
Root原理分析及防Root新思路
第1章 Root的基本原理Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。你想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入root用户的密码,密码正确就获得root权限了。Android本身就不想让你获得Root权限,大部分手机出厂的时候根本就没有su这个程序。所以你想获得Android的...原创 2019-12-17 19:56:04 · 1358 阅读 · 1 评论 -
Android缓存机制分析
一、二级缓存工作机制所谓二级缓存实际上并不复杂,当Android端需要获得数据时比如获取网络中的图片,我们首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取;当获得来自网络的数据,就以key-value对的方式先缓存到内存(一级缓存),同时缓存到文件或sqlite中(二级缓存)。注意:内存缓存会造成堆内存泄露,所有一级缓存通常要严格控制缓...原创 2019-12-17 18:12:52 · 700 阅读 · 0 评论 -
Android中PID与UID的作用与区别
PID:为Process Identifier, PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID。进程中止后PID被系统回收,可能会被继续分配给新运行的程序,但是在android系统中一般不会把已经kill掉的进程ID重新分配给新的进程,新产生进程的进程号,一般比产生之前所有的进程号都要大。UID:一般理解为User Identifier,UID在linux中...原创 2019-12-17 12:06:52 · 3722 阅读 · 0 评论 -
详解Android系统的启动流程
一、init进程启动1.按下Power键,引导芯片代码从预定义的地方(固化在ROM(read only memory)的预定义位置) 开始加载引导程序 BootLoader到RAM(random access memory),然后执行引导程序(bootloader)引导程序BootLoader是Android系统运行前的第一个程序,它的主要作用是把系统OS拉起来并运行.BootLoader...原创 2019-12-17 11:12:01 · 162 阅读 · 0 评论 -
Android ANR监测方案解析
简介ANR(Application Not Responding),应用程序无响应,会严重影响用户体验。作为测试开发人员更深入的理解ANR原理,可以更好的针对各类卡顿性能问题制定对应的监控策略。本文简单总结了Android系统的ANR监测与现有的监测方案的原理对比。ANR的触发条件ANR的本质是一个性能问题,即主线程中的耗时操作造成主线程堵塞,导致应用失去响应能力。常见的超时时限...原创 2019-12-16 22:02:08 · 528 阅读 · 0 评论 -
Android系统API实现网络请求
一、使用URL访问网络资源URL对象代表统一资源定位器,指向互联网资源的指针,由协议名,主机,端口和资源组成。URI代表统一资源标识符,不能用于定位资源,唯一的作用就是解析。URL则包含一个可打开该资源书入输入流,因此可以说URL是URI的特例。URL实现图片下载private Bitmap bitmap;Handler handler = new Handler() {@Over...原创 2019-02-15 11:20:45 · 2385 阅读 · 0 评论 -
移动网络http请求不到数据,wifi下可以
今天客户反馈手机登录不上去,用wifi可以,但是切换到移动网络就不行。查找相关文档 发现由于 Android P(版本27以上) 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉。所以如果当前应用的请求是 htttp 请求,而非 https ,这样就会导系统禁止当前应用进行该请求。请看下面的官方说法:Android致力于保护用户们的设备和数据安全。我们保证数据安全的方法之一是...原创 2019-02-18 10:29:48 · 4527 阅读 · 0 评论 -
Android中Handler 、Thread和Runnable之间的关系
在多线程编程的时候,我们经常会用到Handler,Thread和Runnable这三个类,我们来看看这三个类之间是怎么样的关系? 首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。而Runnable是一个接口,Thread是Runnable的子类。可以说,他俩都算一个进程。Han...原创 2019-02-26 16:59:01 · 680 阅读 · 0 评论 -
关于Context的一些理解
Activity mActivity =new Activity()作为Android开发者,不知道你有没有思考过这个问题,Activity可以new吗?Android的应用程序开发采用JAVA语言,Activity本质上也是一个对象,那上面的写法有什么问题呢?估计很多人说不清道不明。Android程序不像Java程序一样,随便创建一个类,写个main()方法就能运行,Android应用模型是...原创 2019-04-11 14:08:41 · 323 阅读 · 0 评论 -
浅析Android Binder机制
在Android开发过程中,Binder的身影无处无处不在,我们编写的程序都使用过Binder机制(例如startActivity的执行过程)但是请问你知道什么是Binder么?在开发过程中你察觉到它的存在了么?什么是BinderBiner翻译过来是“胶水“的意思,这个翻译分形象。Binder的主要工作就是淡化了进程边界,淡化了进程间通信的过程。要是想更好的理解Binder就必须从Lin...原创 2019-04-11 17:25:17 · 160 阅读 · 0 评论 -
AIDL使用详解
一、概述AIDL 意思即 Android Interface Definition Language,翻译过来就是Android接口定义语言,是用于定义服务器和客户端通信接口的一种描述语言,可以拿来生成用于IPC的代码。从某种意义上说AIDL其实是一个模板,因为在使用过程中,实际起作用的并不是AIDL文件,而是据此而生成的一个IInterface的实例代码,AIDL其实是为了避免我们重复编写代...原创 2019-04-11 17:44:33 · 223 阅读 · 0 评论 -
从android中AIDL谈Proxy/Stub模式
如果activity要想和一个跨进程的Service进行通信就需要通过Binder框架,获取到IBinder对象,并调用transact()方法来达到通信的目的。该方法里的第一个参数是整数型的code,表示的是请求的服务类型,比如说我想请求使用某播放器服务,我就需要制定一个规则:当code为1时表示开始播放,当code为2时表示停止播放,当code为3时表示下一首歌曲。。。这中方法有...原创 2019-07-10 19:13:55 · 933 阅读 · 0 评论 -
Android Data Binding(数据绑定)用户指南
1)介绍这篇文章介绍了如何使用Data Binding库来写声明的layouts文件,并且用最少的代码来绑定你的app逻辑和layouts文件。Data Binding库不仅灵活而且广泛兼容- 它是一个support库,因此你可以在所有的Android平台最低能到Android 2.1(API等级7+)上使用它。需求:Android Plugin for Gradle **1.5.0-...原创 2019-07-10 19:24:31 · 583 阅读 · 0 评论 -
在Android中两个子线程之间通信
Android中,相信主线程和子线程之间的通信大家都不陌生了吧。在一次面试经历中被问到了两个子线程之间是如何进行通信的。哎呦!这可蒙住我了。后来回家研究了下,分享给大家。其实android中线程通信无非就是handler和looper的操作。一般情况下的主线程和子线程之间的通信,都是通过主线程中的handler把子线程中的message发给主线程中的looper,或者,主线程...原创 2019-07-10 19:29:01 · 2295 阅读 · 0 评论 -
Android SQLite 事务处理详解
应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。而且不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败,后续还得删除。太麻烦)解决方法:添加事务处理,...原创 2019-07-10 19:34:14 · 748 阅读 · 0 评论 -
TouchEvent事件传递机制
涉及的知识点:主要涉及的方法:方法用途public boolean dispatchTouchEvent(MotionEvent ev)用来分发TouchEventpublic boolean onInterceptTouchEvent(MotionEvent ev)用来拦截TouchEvent原创 2017-11-29 16:23:58 · 292 阅读 · 0 评论