![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
田先生
这个作者很懒,什么都没留下…
展开
-
【白话】App从启动到页面显示出来发生了什么
点击App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求 system_server收到请求后,向Zygote进程发送创建进程的请求 Zygote进程fork出新的子进程,即App进程 App进程创建出来后,通过Binder IPC向system_server发起attachApplication请求 system_server收到请求后,进行一系列的准备工作,再通过bind IPC向App进程发送scheduleLaunchAc原创 2020-05-21 15:27:33 · 331 阅读 · 0 评论 -
【白话】APK编译打包流程
Java编译器对工程本身的java代码进行编译,这些java代码有三个来源:App的源代码,有资源文件生成的R文件(aapt工具),AIDL文件生成的Java接口文件,产出为.class文件用AAPT编译R.java文件 编译AIDL的java文件 把java文件编译成class文件 class文件和依赖的三方库文件通过dex工具生成Delvik虚拟机可执行的.dex文件,包含了所有的class信息,包括项目自身的class和依赖的class,产出为.dex文件 apkbuilder工具将.原创 2020-05-21 10:10:40 · 200 阅读 · 0 评论 -
【白话】measure,layout,draw
这三者的顺序就相当于盖房子1)先测量地基,有多大的尺寸可以让我来操作(measure)2)再来布局设计,根据测量后的尺寸来设计出符合自己审美的布局(layout)3)绘制,开始真正的装修了(draw)Measure主要是调用measure()方法,主要有两个参数widthMeasureSpec, heightMeasureSpecMeasureSpec就是测量规格,共32位,分为高2位和低30位,高2位就是测量模式,低30位就是测量的尺寸大小「通俗来讲:按照什么方法来测量类.原创 2020-05-20 16:53:12 · 194 阅读 · 0 评论 -
Window,Activity,DecorView,ViewRootImpl之间的关系
Activity不负责控制视图,只是控制生命周期和处理事件,真正控制视图的是Window,Activity中含有一个Window,Window才是真正代表一个窗口Window视图的承载器,内部持有DecorView,而DecorView是View的根布局,Window是一个抽象类,真正的实现类是PhoneWindow,PhoneWindow有个内部类DecorView,通过其来加载R.layout.activity_main。Window通过WindowManager将DecorView加载其中原创 2020-05-20 16:20:08 · 536 阅读 · 0 评论 -
HashMap
用于记录,有不对的欢迎指正hashMap的put(key,value)进行了哪些操作?首先判断table是否为空,如果是的话先进行扩容,后面再进行操作1.根据插入的的key获取到hash值,通过hash%hash表长度获取存放的位置2.判断存放的位置是否存在元素,如果没有则直接进行存放,如果有的话判断hash值和key值是否一致,如果一致说明是覆盖操作3.如果不一致,则说...原创 2020-04-26 11:38:28 · 201 阅读 · 0 评论 -
android--组件化
android组件化现在来说算是比较老生常谈的一种方式了,写此文主要是回顾+锻炼自己表达能力,主要描述下思想,具体的代码实现不做过多赘述,主要是仿照实现了ARouter的功能 常用的开发大体上来说分为了模块化,组件化,插件化,像模块化主要是将一些公共功能以及一些业务模块进行抽离,其实来说是适用大多数项目的,组件化以及插件化个人感觉比较适用于大一些的项目,团队与团队之间配...原创 2020-03-20 16:03:54 · 151 阅读 · 0 评论 -
用面向对象的方式来操作数据库
正常来说使用sql来操作数据库的话没啥问题,但是对于一些不太擅长写sql的同学来说,通过面向对象的方式来操作数据库,可以极大的避免写sql时不小心犯错误的情况,接下来让我们直接进入主题首先是需要先定义接口规范,即数据库常用的增删改查操作,这用来让我们知道有哪些功能,当然还可以自己再继续扩展public interface IBaseDao<T> { /** ...原创 2020-03-18 15:32:45 · 1299 阅读 · 0 评论 -
android-自定义换肤(2)
android-自定义换肤(1)https://blog.csdn.net/tiangaopan/article/details/104895134原创 2020-03-16 13:52:24 · 735 阅读 · 1 评论 -
android-自定义换肤(1)
本质上来说换肤其实挺简单的,主要抓住关键的点,就是获取到控件去设置对应的颜色,字体,背景等 正常来说我们使用activity来加载一个页面的时候使用setContentView(R.layout.activity_main); 让我们进入源码追踪一下 @Override public void setContentView(@LayoutRes int layo...原创 2020-03-16 11:37:49 · 377 阅读 · 0 评论 -
Handler--为什么在子线程中可以弹吐司却不能UI绘制
private void initDeal() { Thread hanMeiMeiThread = new Thread(){ @Override public void run() { Looper.prepare(); mHandler = new Handler(...原创 2020-03-11 10:47:09 · 353 阅读 · 0 评论 -
Flutter 与原生通讯
开发中通常需要 Flutter 端与原生内容进行交互。Flutter 定义了三种不同的ChannelBasicMessageChannel:用于传递字符串和半结构化的信息 MethodChannel:用于传递方法调用 EventChannel:用于数据流的通信BasicMessageChannelpublic class FlutterPluginBasicTest implem...原创 2019-09-25 16:02:16 · 431 阅读 · 0 评论