- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 软件重构
重构这个话题是老生常谈的了,无论对于C、java亦或Python程序员来讲,只要项目有一定的代码量,重构就是无可避免的。正好这段时间我正在给一个android应用项目(下文统称项目X)做重构,这个项目原本是由一个完全不会写代码的人写的,可以说项目没有任何可读性,逻辑也没有很清晰。本文我会结合自己的实践和一些参考资料谈谈我对重构的一些理解。什么是重构?重构是在保证不改变外部行为的前提下,对内部结...
2020-03-30 13:43:31 1278
原创 Android 10 适配攻略
前几天收到了公司的邮件,要求下一期版本中升级targetSDK29,也就是适配Android10。想着这周自己的手机也刚刚升级到Android10系统,趁着趁着兴奋就赶紧来研究一下AndroidQ吧!1.框架迁移步骤从AndroidStudio中Tools > SDK Manager > SDK Platforms中选择Android Q SDK (Api Level 29) ...
2020-03-02 23:29:24 1892
原创 CRN路由管理
每次跳转都会先判断要跳转的页面是否当前业务内,如果没有使用CRNURLHandle跳转到相应的业务在Native端本身也是有路由栈,这样在Back时可以返回到相应的业务内...
2020-02-29 23:42:43 251
原创 浅谈Android的Choreographer
对于渲染绘制的分析,我们从ViewRootImpl中的scheduleTraversals方法着手,从这个方法开始触发performTraversals,之后会调用onMeasure,onLayout,onDraw进行界面的绘制。那么先来看一看scheduleTraversals这个方法吧~void scheduleTraversals() { if (!mTraversalS...
2020-02-27 22:53:56 924 1
原创 Android启动流程---App层
一. 概述先简单说说进程与线程的区别。进程:每个App在启动前必须先创建一个进程,该进程是由Zygote fork出来的,进程具有独立的资源空间,用于承载App上运行的各种Activity/Service等组件。进程对于上层应用来说是完全透明的,让App程序都是运行在Android Runtime。大多数情况一个App就运行在一个进程中,除非在AndroidManifest.xml中配置A...
2018-06-27 21:16:06 780
原创 Android启动流程---init
一、概述init是Linux系统中用户空间的第一个进程,进程号为1。Kernel启动后,在用户空间,启动init进程,并调用init中的main()方法执行init进程的职责。对于init进程的功能分为4部分:分析和运行所有的init.rc文件; 生成设备驱动节点; (通过rc文件创建) 处理子进程的终止(signal方式); 提供属性服务。1. main方法2. c...
2018-06-27 20:25:11 368 1
原创 Android架构介绍
Android架构介绍Google提供的4层架构图很经典,但为了更进一步透视Android系统架构,本文更多的是以进程的视角,以分层的架构来诠释Android系统的全貌,阐述Android内部的环环相扣的内在联系。Loader层Boot ROM: 当手机处于关机状态时,长按Power键开机,引导芯片开始从固化在ROM里的预设出代码开始执行,然后加载引导程序到RAM; Boot L...
2018-06-27 19:19:28 1688
原创 多渠道打包实践
多渠道意味着您的应用程序可以发布到不同的应用程序市场。 在由不同用户从不同市场下载后,您可以监视每个应用程序从哪个市场安装。 有很多方法可以实现,主要是通过在安装包中放置一个标志来区分不同的频道包。在进行多渠道打包之前,先介绍一下Android Studio工程中的gradle脚本。 展开Gradle Scripts我们可以看到里面有两个build.gradle文件和一个settings...
2018-03-11 20:39:07 255
原创 Android消息机制之Handler的深入理解
欢迎使用Markdown编辑器写博客上周老大让我主持了一个团队技术培训的会议,会议的内容是Handler技术的整体使用流程,包括从Java端到Native端的分析。借此机会,写成一篇文章记录一下成果。若有不足之处,希望大家可以指出,欢迎互相讨论,谢谢。Java层中的消息生成是从用户创建的Message对象而来的,它是一个由Runnable封装过的对象。或者从Message Pool调用getsMes
2017-10-15 22:58:08 385
原创 Android7.0成长之路---新特性Jack server
准备今天正式担任Android7.0(N)项目模块的开发和维护工作,借此机会git和make了一套系统代码用来研究。在编译的过程中,与以往系统不同的是Android7.0系统编译工具链使用了全新的Jack server来取代以往的编译器工具,所以在编译的过程中可能出现一些小问题,后面将为大家总结介绍!Jack server一、介绍我们先来看一下关于Jack server官方介绍: Jack is
2016-12-26 16:52:44 20632
原创 Http 请求与响应具体步骤
1. 建立 TCP 连接在开始工作之前,Web浏览器首先通过网络建立与Web服务器的连接。 连接通过TCP / IP协议完成, TCP连接最熟悉三次握手。 我的理解是三次握手:首先客户端向服务器发送连接服务器请求,其次服务器响应客户端请求并通知客户端已收到请求。 最后客户端通知服务器接收响应并可以可靠地传输数据。2. web 浏览器向服务端发送请求命令一旦建立了TCP连接,Web浏览器就会向服务器...
2016-05-23 16:45:32 1758
原创 《Thinking in Java》总结
1.对象存放位置与生命周期C++创建的对象可以存放在栈、静态存储区与堆(heap)中,放在栈中的对象用完后不需手动释放,会自动销毁,但放在堆中的对象需手动释放,栈中的对象所需空间与生命周期都是确定的,堆中的对象内存分配是动态的,在运行时才知道需要多少内存以及生命周期,如果说在堆上创建对象,编译器就会对它的生命周期一无所知,C++就需要以编程的方式来确定何时销毁对象,这可能因不正确处理而导致内存泄漏...
2015-04-06 16:20:08 883
原创 Java集合类---ArrayList源码分析
package java.util; public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { // 版本号 ...
2015-03-08 20:50:48 881
原创 Java集合类---HashMap源码分析
JDK版本:1.8package java.util; import java.io.*; public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { ...
2015-03-08 20:12:00 529
原创 死锁
死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B,线程2也永远得不到A,并且它们永远也不会知道发生了这样的事情。为了得到彼此的对象(A和B),它们将永远阻塞下去。这种情况就是一个死锁。publi...
2015-03-04 20:04:50 656
原创 Fragment的使用总结和实例详解
Fragment在其生命周期中的状态一共有运行状态、暂停状态、停止状态和销毁状态这四种。类似地,每个碎片在其生命周期内也可能会经历这几种状态,只不过在一些细小的地方会有部分区别。
2015-02-26 11:56:11 1296
原创 ListView和RecyclerView的使用和性能优化总结
在手机中,使用列表显示是一种常见的显示格式,那么ListView就是一种常见的方式。例如:今日头条,网易新闻都是使用ListView或者是最近流行的RecyclerView进行首页的布局。
2015-02-25 12:38:28 4527 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人