7 huaxun66

尚未进行身份认证

暂无相关简介

等级
TA的排名 1w+

Android组件生命周期管理

每个Android应用启动时,都会先创建一个Application。通常在Application里我们会做一些应用初始化的操作,常见的有第三方SDK初始化。在应用组件化之后,组件与壳工程是隔离开来的,但是组件有时候也需要获取应用的Application,也需要在应用启动时进行初始化。这就涉及到组件的生命周期管理问题。最简单的实现方式如下:我们定义一个Application的代理接口IAppL...

2020-01-14 19:44:24

Android组件化开发

开发模式为了便于区分,在这里将开发模式分为2种:一种是项目组件化开发模式,一种是单一工程开发模式。单一工程开发模式顾名思义,就是一个代码工程(Project)对应一个APP了,这个APP的所有业务功能都是集中在同一个工程里实现的。捕获.PNG上图是目前比较普遍使用的Android APP技术架构,往往是在一个界面中存在大量的业务逻辑,而业务逻辑中充斥着各种网络请求、数据操作等行为,整个项...

2019-12-21 15:44:10

Android字节码插桩

什么是字节码插桩字节码插桩就是在构建的过程中,通过修改已经编译完成的字节码文件,也就是class文件,来实现功能的添加。简单来讲,我们要实现无埋点对客户端的全量统计。这里的统计概括的范围比较广泛,常见的场景有:页面(Activity、Fragment)的打开事件各种点击事件的统计,包括但不限于Click LongClick TouchEventDebug期需要统计各个方法的耗时。注意这里...

2019-12-11 18:49:20

Gradle自定义插件

Android GradleAndroid项目使用 Gradle 作为构建框架,Gradle 又是以Groovy为脚本语言。所以学习Gradle之前需要先熟悉Groovy脚本语言。Groovy是基于Java语言的脚本语言,所以它的语法和Java非常相似,但是具有比java更好的灵活性。Android Gradle 的 Project 和 Tasks这个是Gradle中最重要的两个概念。每次...

2019-12-11 18:20:35

Java8新的异步编程方式CompletableFuture

Java并发编程(一)线程创建、生命周期、控制这篇文章我们提到过Future可以实现异步编程,但是Future模式有自己的缺点:Future虽然可以实现获取异步执行结果的需求,但是它没有提供通知的机制,我们无法得知Future什么时候完成。要么使用阻塞,在future.get()的地方等待future返回的结果,这时又变成同步操作。要么使用isDone()轮询地判断Future是否完成,这样...

2019-11-30 16:08:33

Android使用WindowManager实现悬浮窗

上一篇文章Framework学习(十一)WindowManager体系我们分析了WindowManager的用法及源码,这篇文章我们使用WindowManager实现一个简单的悬浮窗效果。类似与下面这种效果:项目目录项目目录结构很简单,一个MainActivity,一个WindowService。MainActivity只有两个按钮,用于启动和关闭WindowService。添加实现悬浮窗的逻辑全部

2017-10-27 17:09:31

Framework学习(十一)WindowManager体系

Window、WindowManager和WMSWindow是一个抽象类,具体的实现类为PhoneWindow,它是对View进行管理的。WindowManager是一个接口类,继承自父接口ViewManager,它是用来管理Window的,它的具体实现类为WindowManagerImpl。WMS是WindowManager进行窗口管理的具体实施者,如果我们想要对Window进行添加和删除就

2017-10-26 15:56:38

Java并发编程(四)未处理异常、线程池和ThreadLocal类

未处理异常以我们通常的经验,如果线程执行过程中抛出了未处理异常(没有用try-catch),那么我们的APP就会崩溃,并且我们可以从Error Log中看到出错的异常堆栈信息。那么我们有没有方法,在异常抛出之前对该异常进行处理呢?Thread.UncaughtExceptionHandler是Thread类的一个静态内部接口,该接口只有一个方法:void uncaughtException(Thre

2017-10-25 10:34:45

Android应用内跳转Scheme协议

之前一篇文章WebView使用解析(一)之基本用法我讲过了WebView与JS交互的方式,JS调用Java代码主要是通过对象注入的方式实现的,即使用addJavascriptInterface。而JAVA调用JS代码则是通过javascript:伪协议来实现的,即javascript:methodName(params……)。但是这种交互方式存在着不少问题: 1、Java 调用 js 里面的函数,

2017-10-18 16:38:14

Framework学习(十)Content Provider启动过程

关于Content Provider的使用请参考Android ContentProvider全面解析这篇文章。query方法到AMS的调用过程在上述文章中我用到了Content Provider查询数据库的例子如下:private void query() { Cursor cursor = this.getContentResolver().query(mCurrentURI,

2017-10-10 17:01:40

Framework学习(九)Broadcast的注册、发送和接收过程

广播的注册BroadcastReceiver的注册分为两种:静态注册和动态注册。静态注册在应用安装时由PackageManagerService来完成注册过程。这里只介绍BroadcastReceiver的动态注册。动态注册BroadcastReceiver,需要调用registerReceiver方法,它的实现在ContextWrapper中。frameworks/base/core/java/a

2017-10-10 10:41:50

Framework学习(八)Service的启动/绑定过程

之前的文章Framework学习(五)应用程序启动过程我们讲解过了应用程序(Activity)的启动过程,本篇我们来看看Service的启动/绑定过程。Service的启动过程ContextImpl请求AMS要启动Service,我们会调用startService方法,它的实现在ContextWrapper中。frameworks/base/core/java/android/content/Con

2017-10-09 14:30:18

Framework学习(七)AMS家族

相信绝大部分读者对ActivityManagerService(简称AMS)都有所耳闻。AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要。AMS启动流程在Framework学习(三)SystemServer进程启动过程这篇文章我们简单介绍过SystemServer

2017-10-07 14:04:11

Framework学习(六)应用程序进程启动过程

概述上篇文章Framework学习(五)应用程序启动过程我们讲解了应用程序启动过程,但是还有一个遗留知识点,那就是应用程序进程的启动。我们知道应用程序启动之前需要保证应用程序的进程先启动,本文我们就来看看应用程序进程的启动过程。AMS在启动应用程序时会检查这个应用程序需要的应用程序进程是否存在,不存在就会请求Zygote进程将需要的应用程序进程启动。在Framework学习(二)Zygote进程启动

2017-10-03 18:17:56

Framework学习(五)应用程序启动过程

在Android系统中,启动四大组件中的任何一个都可以启动应用程序。但绝大部分时候我们是通过点击Launcher图标来启动应用程序。本文依据Android7.0源码,从点击Launcher图标开始,分析应用程序的启动过程,其实就是分析根Activity的启动过程。Launcher请求AMS在Framework学习(四)Launcher启动过程 这篇文章我讲过Launcher启动后会将已安装应用程序的

2017-10-02 15:59:15

Framework学习(四)Launcher启动过程

Launcher概述上一篇文章Framework学习(三)SyetemServer进程启动过程中我们讲解了SystemServer进程的相关知识,我们知道SystemServer进程主要用于启动系统的各种服务,其中就包含了Launcher服务,LauncherAppService。Android系统默认第一个启动的应用程序是Home应用程序,这个应用程序用来显示系统中已经安装的应用程序,这个Home

2017-10-01 22:58:14

Framework学习(三)SystemServer进程启动过程

SyetemServer进程的启动在上一篇文章Framework学习(二)Zygote进程启动过程中,我们已经知道Zygote进程会启动SyetemServer进程,但具体启动流程还没有涉及,本文我们就来看看SyetemServer进程具体启动过程。首先回顾下ZygoteInit#startSystemServer()函数:frameworks/base/core/java/com/android/

2017-09-30 16:17:29

Framework学习(二)Zygote进程启动过程

android系统进程启动流程android系统的Zygote进程是所有android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的。Zygote(孵化)进程相当于是android系统的根进程,后面所有的进程都是通过这个进程fork出来的,而Zygote进程则是通过linux系统的init进程启动的,也就是说,android系统中各种进程的启动方式:i

2017-09-30 11:11:08

Framework学习(一)Android 系统架构

Android系统架构Android本质就是在标准的Linux系统上增加了Java虚拟机Dalvik/ART,并在Dalvik/ART虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。应用程序层

2017-09-29 16:59:41

Java Class对象与反射机制

Java Class对象RTTIRTTI(Run-Time Type Identification)运行时类型识别,其作用是在运行时识别一个对象的类型和类的信息。这里分两种:传统的”RRTI” — 它假定我们在编译期已知道了所有类型(在没有反射机制创建和使用类对象时,一般都是编译期已确定其类型,如new对象时该类必须已定义好)反射机制 — 它允许我们在运行时发现和使用类型的信息在

2017-09-15 14:58:28

查看更多

勋章 我的勋章
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。