自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

风雨与阳光

命运它无法让你跪地求饶,总有一个世界会给你怀抱,特别是技术的世界。

  • 博客(24)
  • 收藏
  • 关注

原创 Android组件管理框架—后台服务Service之startService方式启动流程(Android P)

一 前言       Service组件是Android应用四大组件之一,主要用来处理与用户界面无关的逻辑。Service的启动过程与Activity的启动过程是类似的。和Activity一样,启动过程由ActivityManagerService来管理。我们下面分析的是启动的Service和启动者(可以是Activity、Service等)是在同一个进程,在此假设是在Activity启动的。...

2018-12-11 23:08:11 1969

原创 Android组件管理框架—视图容器Activity之回退栈

一 前言任务、回退栈概念         一个Task是多个能够和用户进行交互并且能完成某种功能的activities的集合,可以通过getTaskId()方法来获取当前Activity对象所在Task的Id。 这些Activity被被放在一个堆栈(backstack)里,后启动的Activity对象的ActivityRecord会放在Task的栈顶。        Activity启...

2018-11-28 22:54:36 556

原创 Android组件管理框架—视图容器Activity之启动流程(Android P)

一 前言        一般像这种源码调用流程会比较长和绕,我们在分析的时候要有一定学习目标(比如这个实现的功能,为什么这样实现),有目标就不会迷失;先熟悉大致流程;抓住关键地方;某些细节的东西需要的时候再去研究。个人觉得既然研究的对象是源码,那么分析的大部分将还是以源码的形式展示较好。要想在哪方面长进,那么就在那里翻滚;要想懂得深渊,那么请先凝视深渊,这样深渊才会凝视你。学习目标  ...

2018-11-23 23:15:39 759 1

原创 源码分析Wifi工作流程系列

一 前言         经过大概一个月的时间将Wifi的工作过程源码分析了一遍,整理了该系列文章。其中肯定有一些遗落的地方,而且有些篇幅仅仅分析到java框架层,以后有机会会慢慢补充下去,以及Wifi其它相关方面的知识。一直觉得生命在于经历,在于积累,积累多了便会有沉淀,当然也会有随风飘散。       在分析这种比较庞大的事物时,可以先知大概,在内心构建框架,再不断地去填满充塞,分而化...

2018-10-20 11:30:29 1721

原创 Wifi模块—源码分析Wifi启动1(Android P)

一 前言      android框架层的函数调用是出了名的绕,开发者可能因为各种原因比如避免冲突、条件判断、函数封装等等各种各样需要考虑的因素而使得框架层的方法调用显得比较长,所以看源码的时候先看大体流程,有需要再深入某些重要的细节。不然一入源码深似海,会淹没在茫茫源码中。繁杂的东西,自己只要不凌乱,找好线索,进行总结,便会简单。 二 图示调用流程              ...

2018-09-13 00:49:02 10703 3

原创 Wifi模块—源码分析Wifi热点的开启(Android P)

一 前言 Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,它是一个安全中间件,代码位于external/wpa_supplicant,为各种无线网卡提供统一的安全机制。当然在这里只是介绍一下wpa_supplicant和hostapd,研究分析的部分主要还是应用层和java框架层,有时也会涉及Native层。wpa_supplican...

2019-01-27 12:42:59 4396 1

原创 Android组件管理框架—前台服务Service之startForegroundService方式启动流程(Android P)

一 前言这节的内容也是由于项目中的一个Bug引起:12-13 10:41:07.520 16661 16661 E AndroidRuntime: FATAL EXCEPTION: main12-13 10:41:07.520 16661 16661 E AndroidRuntime: Process: cn.xxx.xxxxx:remote, PID: 1666112-13 10:...

2019-01-22 09:33:35 12594

原创 Android组件管理框架—后台服务Service之bindService方式启动流程(Android P)

一 前言        通过startservice来启动一个service,通常该service是无法返回结果的(这也是与bindservice的区别之一),服务开启, 这个服务和开启他的调用者之间就没有任何的关系了,调用者的生命周期和它的生命周期也没有关系(所以,service在任务完成的时调用stopSelf或stopsService来结束该服务)。       通过bindserv...

2019-01-20 23:27:20 1513

原创 Android组件管理框架—广播接收者BroadcastReceiver之动态注册流程(Android P)

一 前言        接收广播(Broadcast),必须先要注册接收广播的组件——广播接收者(receiver),广播接收者的注册分为动态注册和静态注册,注册中心是AMS,AMS再把广播分发到各个广播接收者(receiver)。静态动态广播的区别        1 动态注册广播不是常驻型广播,广播跟随Activity的生命周期,在Activity结束前,需要移除广播接收器。  ...

2018-12-31 21:46:49 1229

原创 Android组件管理框架—后台服务Service之生命周期(Android P)

一 Service生命周期                                            1 startService()手动调用context.startService:onCreate()——onStartCommand()(service running)手动调用context.stopService:onDestroy()注意:(1) servi...

2018-12-23 18:00:11 1090

原创 Android组件管理框架—视图容器Activity之生命周期

一 Activity简介     一般情况下Activity是与用户交互的接口,它提供了一个用户完成相关操作的窗口。当我们在开发中创建Activity后,通过调用setContentView(View)方法来给该Activity指定一个布局界面,而这个界面就是提供给用户交互的接口。Android系统中是通过Activity栈的方式来管理Activity的,而Activity自身则是通过生命周期...

2018-12-02 22:28:49 377

原创 Android组件管理框架—视图容器Activity之通信

一 将父Activity的信息传递给子Activity通过Intent(1) 将数据放在Bundle对象中,通过Intent传递。import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.w...

2018-11-30 00:56:12 167

原创 Android组件管理框架—视图容器Activity之启动模式

一 前言       启动一个Activity就是创建一个实例,然后进入任务栈。我们可以通过启动模式来改变这种行为,实现不同的交互效果。每个应用都有一个任务栈,是用来存放Activity,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序,可以在AndroidManifest.xml中的标签android:launchMode属性设置。 二 启动模式1 四种启动模式...

2018-11-25 22:38:04 188

原创 Wifi模块—源码分析获取IP地址(Android P)

一 前言        上一篇分析了连接AP的过程,当底层完成wifi连接,便会事件通知WifiMonitor,WifiMonitor监听到该事件后发送消息NETWORK_CONNECTION_EVENT。                                       二 代码具体流程 1 frameworks/opt/net/wifi/service/java/co...

2018-10-20 01:17:25 2983 1

原创 Wifi模块—源码分析Wifi初始化(Android P)

机器启动的时候,主要做了3件事情:1 添加注册ConnectivityService连接服务,它跟所有手机的无线通信都有联系,包括wifi,蓝牙,2g网络,3g网络等。frameworks/base/services/java/com/android/server/SystemServer.javaprivate void startOtherServices() { ......

2018-10-20 01:08:42 2434

原创 Wifi模块—源码分析连接AP(Android P)

一 前言        在前面一篇简单地说明了用户在WifiSettings界面选择一个AP显示配置AP参数的对话框的过程,当用户在对话框中选择好加密方式和输入密码之后,点击确定按钮,Android就会去连接这个AP,这一篇将主要分析连接AP的过程(AP参数没有保存的这种情况)。                                                Wifi模块—源...

2018-10-15 23:34:47 4308

原创 Wifi模块—源码分析配置AP(Android P)

一 前言        当用户在WifiSettings界面选择了一个AP,会显示配置AP参数的对话框,当用户在对话框中选择好加密方式和输入密码之后,点击连接按钮,Android就会去连接这个AP。可以先会看前面的wifi的扫描过程。                       Wifi模块—源码分析Wifi热点扫描(Android P)                       W...

2018-10-13 17:51:21 3127 1

原创 Wifi模块—源码分析Wifi热点扫描2(Android P)

一 前言       这次接着讲Wifi工程流程中的Wifi热点扫描过程部分的获取扫描结果的过程,也是Wifi扫描过程的延续,可以先看前面Wifi扫描的分析过程。                           Wifi模块—源码分析Wifi热点扫描(Android P)                            二 图示调用流程      这次的调用流程比较简...

2018-10-12 10:23:01 1971 1

原创 Wifi模块—源码分析Wifi热点扫描(Android P)

一 前言       这次接着讲Wifi工程流程中的Wifi热点查找过程,也是Wifi启动的过程延续,Wifi启动过程中会更新Wifi的状态,框架层也有相应广播发出,应用层接收到广播后开始进行热点的扫描。可以先看前面Wifi启动的分析过程。                               Wifi模块—源码分析Wifi启动1(Android P)              ...

2018-09-26 01:04:00 5082 7

原创 Wifi模块—源码分析Wifi启动2(Android P)

 一 前言   在上一篇分析了wifi启动的流程,从Android应用层一直分析到了Java框架层,这次我们接着往下走流程。如果没有看上一篇的建议先回头看看   Wifi模块—源码分析Wifi启动1(Android P)这样能更好地认知和把握wifi的启动过程。 二 图示调用流程    这个调用流程图也是基于上一篇的流程图进一步完善的得到的。 三 代码具体流程1 应...

2018-09-20 22:50:55 5106 8

原创 Android每天一个知识点+Demo—跨进程通信机制AIDL入门

一 Why-为什么要用AIDL沙箱理念:在Android中,每个应用(Application)程序都运行在独立的进程中,无法直接调用到其他应用的资源。当一个应用被执行时,一些操作是被限制的,比如访问内存,访问传感器等等。好处:这也保证了当其中一个程序出现异常而不会影响另一个应用程序的正常运转,这样做可以最大化地保护系统。 android在设计理念上强调组件化,组件之间的依赖性很小。案例...

2018-09-15 16:37:51 628

原创 Android每天一个知识点+Demo—异步消息机制实现

一 前言Handler的由来(1)首先为什么需要Handler呢? 因为UI更新只能在UI线程。(2)那为什么只能在UI线程更新UI呢? 因为Android是单线程模型。(3)那为什么Android是单线程模型? 因为如果任意线程都可以更新UI的话,线程安全问题处理起来会相当麻烦复杂,所以就规定了Android是单线程...

2018-09-15 10:32:51 222

原创 Java每天一个知识点+Demo-多线程相关命令

一 多线程相关命令介绍1 wait()  sleep() (1)这两个方法来自不同的类分别是wait()来自Thread,sleep()来自Object。 (2) 最主要是sleep方法没有释放锁,sleep使当前线程进入停滞状态(阻塞当前线程),让出cpu的使用、目的是不让当前线程   独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会线程虽然休眠了,但是对象的机锁并木...

2018-08-19 01:59:18 342

原创 Wifi模块—Wifi系统框架

222

2018-06-30 13:35:37 6954 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除