荏苒追寻个人博客

做一个有追求的青年


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

Android 开源库分析——ExoPlayer使用与分析

发表于 2019-11-01 | 分类于 Android , 开源库分析

本文链接:https://rainmonth.github.io/posts/A191101.html

摘要

主要根据谷歌官方提供的demo,来了解ExoPlayer的基本使用。

阅读全文 »

Android 系统架构——组件化开发实践

发表于 2019-10-27 | 分类于 Android , 系统架构

https://rainmonth.github.io/posts/A191027.html

摘要

随着App业务的发展,业务模块会越来越多,而不同模块可能对某一个功能都有依赖,比如分享、登录等,这个时候如果没有将这些通用的功能抽象成组件单独拎出来,就面临着相同功能的代码在不同的模块中都有一分实现,如果需要更改这个功能的实现,就需要在每个模块中都改一遍,因此需要将这些通用功能抽象成组件独立出来,这就是组件化的过程。

阅读全文 »

Android 四大组件——Service详解

发表于 2019-10-25 | 分类于 Android , 四大组件

https://rainmonth.github.io/posts/A191025.html

Service基本概念

Android 四大组件之一,运行于主线程之中。

Service启动分析

startService与bindService分析

Service的销毁

调用startService() 和 bindService()后,要销毁service必须_同时调用_stopService()和unbindService()方法才可以,因为:

  • 点击Stop Service按钮只会让Service停止;
  • 点击Unbind Service按钮只会让Service和Activity解除关联;

一个Service必须要在既没有和任何Activity关联又处理停止状态的时候才会被销毁;

阅读全文 »

Android Binder线程池工作过程

发表于 2019-10-23 | 分类于 Android

https://rainmonth.github.io/posts/A191023.html

要分析的源码文件

1
2
3
4
frameworks/base/cmds/app_process/app_main.cpp 
frameworks/native/libs/binder/ProcessState.cpp
framework/native/libs/binder/IPCThreadState.cpp
kernel/drivers/staging/android/binder.c

Binder系统中的Binder线程类型

  • Binder主线程,进程创建的时候会调用startThreadPool()方法,该方法又会调用spawnPooledThread(true)方法,在这个方法中创建Binder主线程,编号从1开始(即binder主线程名为binder_1
  • Binder普通线程,由Binder Driver根据是否有空闲的binder线程(因为Binder线程池中线程个数是有限制的一般为15,注意不包括主线程)通过回调spawnPooledThread(false)方法来创建,该线程名称格式为binder_x;
  • Binder其他线程,指的是没有调用spawnPooledThread方法,而是直接调用IPC.joinThreadPool()方法将当前线程加入到binder线程队列。如mediaserver和servicemanager的主线程都是binder线程,但system_server的主线程并非binder线程。

Android 进程的创建过程

发表于 2019-10-23 | 分类于 Android

本文链接:https://rainmonth.github.io/posts/A191023.html

Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么

进程的概念

进程创建时序图

进程创建过程中的几个关键进程

Launcher 进程

system_server 进程

zygote进程

目标应用的进程

总结

参考文章

Android APP应用启动过程分析 - 掘金

Android NDK开发——NDK与JNI简单介绍及NDK开发demo实现

发表于 2019-10-21 | 分类于 Android , NDK开发

https://rainmonth.github.io/posts/A191021.html

摘要

之前一直对NDK和JNI这两个玩意理解有点模糊,本文先分别介绍两者的相关概念,再介绍两者的使用的一般流程,最后介绍两者的联系。

Jni接口文档

本文主要介绍NDK开发时的一些环境配置,并提供了一个Java调用Native方法的简单实例。

阅读全文 »

Android 系统源码分析——系统的启动

发表于 2019-10-21 | 分类于 Android

https://rainmonth.github.io/posts/A191019.html

Android系统的启动

先看启动相关进程的关系图

Android系统进程关系图

阅读全文 »

Android 工具命令——adb学习

发表于 2019-10-20 | 分类于 Android , 工具命令

https://rainmonth.github.io/posts/A191020.html

摘要

adb,指的是Android Debug Bridge,即Android调试桥,顾名思义,和Android调试有莫大的关系。可以在命令通过输入命令来查看Android系统支持的服务的各种运行状态。

环境配置

  • 首先要已经搭建好Android开发环境(具体请自行百度)

  • 其次,为了避免频繁调用cd(切换目录命令,建议配置好环境变量,Mac下具体配置如下)

    1
    export PATH=${PATH}:/Users/RandyZhang/Library/Android/sdk/platform-tools
阅读全文 »

Android 系统源码分析——AMS分析

发表于 2019-10-18 | 分类于 Android

https://rainmonth.github.io/posts/A191018.html

在这里非常感谢Gityuan的博客,让人受益匪浅。

摘要

AMS,即ActivityManagerService,是Android系统的核心服务,负责四大组件的启动、切换、调度以及应用进程的调度和管理,其API并未对我们直接开放,在开放的ActivityManager中主要通过ActivityManagerNative来使用AMS提供的一些API,本文主要介绍AMS的启动过程。

阅读全文 »

Android 系统源码分析——Android Studio 导入android 8.0源码

发表于 2019-10-17

https://rainmonth.github.io/posts/A191017.html

摘要

在之前的文章Android MacOs 下的源码下载及编译中介绍了源码下载以及编译的方法,本文介绍如何把下载编译好的源码导入Android Studio,并且可以进行代码调试

阅读全文 »
<i class="fa fa-angle-left" aria-label="上一页"></i>1…151617…22<i class="fa fa-angle-right" aria-label="下一页"></i>

216 日志
43 分类
43 标签
GitHub
© 2025 Randy Zhang
由 Hexo 强力驱动
|
主题 — NexT.Gemini v6.1.0