
Android笔记
文章平均质量分 93
丶笑看退场
习惯就是人生最大的指导
展开
-
用力一瞥Android渲染机制-黄油计划
涉及到滑动流畅,Android在谷歌4.1版本引入了黄油计划。其中有三个重要的核心元素:VSYNC、缓存区和Choreographer。原创 2022-10-02 17:09:24 · 2202 阅读 · 1 评论 -
从APK安装过程来认识PMS
在涉及到一个包的安装过程的时候,往往都绕不开,它是Android系统中最常用的服务之一。主要负责系统中Package的管理,应用程序的安装、卸载、信息查询等工作。原创 2022-07-08 09:00:00 · 1164 阅读 · 0 评论 -
Window管理深入了解WindowManagerService
在这几个中App主要负责业务逻辑,绘制视图,AMS负责管理组件和进程信息以及堆栈信息,WMS负责管理Activity的窗口以及子窗口和系统窗口,SF则是在用于管理图形缓冲区,进行屏幕渲染。本文分析就基于Android 10.0上。...原创 2022-06-06 23:47:11 · 895 阅读 · 0 评论 -
一文搞明白协程的挂起和恢复
协程是使用非阻塞式挂起的方式来实现线程运行的。那协程又是如何挂起和恢复的,这里面的概念又是什么,带着这些问题就让我们重新探究下协程的挂起和恢复。我们先创建个协程:override fun initView() { lifecycleScope.launch { val num = dealA() dealB(num) } }private suspend fun dealA():Int { wit原创 2022-05-30 14:09:47 · 1089 阅读 · 0 评论 -
Android系统核心服务-“无处不在“的AMS
要有个前言,都知道ActivityManagerService是系统的引导服务,应用程序的启动、切换、调度和四大组件的启动和管理都需要AMS的支持,也可以看出其在Android中的重要性了。今天的故事就要从其启动流程开始讲起,虽然过程是有点枯燥的(本篇基于Android11)。1. AMS启动过程它是从SystemServer的main方法中开始的。//zygote 的主要入口点 public static void main(String[] args) { new SystemS原创 2022-05-01 14:35:37 · 688 阅读 · 0 评论 -
Kotlin委托必须重视的几个点
委托模式是实现继承的一个很好的替代方式,也是Kotlin语言的一种特性,可以很优雅的实现委托模式。在开发过程中也少不了使用它,但常常都会被低估。所以今天就让它得到重视,去充分的掌握kotlin委托特性以及原理。一、委托类我们先完成一个委托类,常常用于实现类的委托模式,它的关键是通过by关键字:interface Base{ fun print()}class BaseImpl(val x: Int): Base{ override fun print() { print(x) }}原创 2022-01-23 16:36:02 · 2482 阅读 · 0 评论 -
【源码解读】Lifecycle来翻个底朝天
相信大家平时经常用到Lifecycle,对它怎么使用应该已经相当熟悉了吧,所以今天省略这一块内容。想个问题,它解决了什么痛点?在真实的应用中,最终会有太多管理界面和其他组件的调用,以响应生命周期的当前状态。管理多个组件会在生命周期方法(如 onStart() 和 onStop())中放置大量的代码,这使得它们难以维护。同时也无法保证组件会在 Activity/Fragment停止后不执行启动。那Lifecycle是怎么解决这些问题的呢,我们直接进入分析源码正题吧。Lifecycle类分析之前先看下原创 2021-11-28 19:29:14 · 1555 阅读 · 0 评论 -
(Android11.0)App启动过程的深度挖掘(下篇)
前文说到,Activity启动过程在ATMS中绕了一大圈,最终还是通过调用ClientTransaction的schedule方法,回到了ApplicationThread中。那我们就接着往下看启动过程。ActivityThread启动Activity我们来看下ApplicadtionThread的scheduleTransaction方法:### ActivityThread/ApplicationThread public void scheduleTransaction(ClientTran原创 2021-11-28 19:24:23 · 1450 阅读 · 0 评论 -
(Android11.0)App启动过程的深度挖掘(上篇)
前言Activity的启动分为两种,一个是根Activity的启动过程,另一种是普通Activity的启动过程。而第一种就是指一个app启动的过程,普通Activity就是指在应用中调用startActivity的过程。拿根Activity的启动来讲比较全面,也很好的理解Android的整个启动过程。可以分为三个部分Launcher请求过程、AMS到ApplicationThread的调用过程和ActivityThread启动Activity。把android7、8、9的启动过程看了一遍,那我们现在就原创 2021-11-25 01:01:44 · 1347 阅读 · 0 评论 -
手写ButterKnife来搞明白Android注解处理器
Butterknife现在在项目中基本没用到了,逐渐被ViewBinding所代替,而我们所熟知它的内部原理是通过自定义注解+自定义注解解析器来动态生成代码并为我们的view绑定id的。今天就通过重新手写ButterKinife来搞明白我们今天的主角–Anotation Processing(注解处理器)。源码地址:APTDemo运行时注解在写注解处理器之前,先用运行时注解来操作下。这里我们先新建一个library取名lib-reflection然后自定义注解,我们只实现了View与id的绑定功原创 2021-11-21 00:07:47 · 1018 阅读 · 0 评论 -
全方位来认识WindowManager
Window应该都比较清楚,它是一个抽象类,具体的时间类未PhoneWindow, 它对View进行管理。WindoowManager是一个接口类,继承自接口ViewManager,从名称上来看它是用来管理Window的,它的实现类为WindowManagerImpl。如果我们想要对Window进行添加、更新和删除操作就可以使用WindowManger,WindowManger会将具体的工作交由WMS来处理,WindowManager和WMS通过Binder来进行跨进程通信。Window和WindowMa原创 2021-11-17 23:57:31 · 1493 阅读 · 0 评论 -
还不懂Android的触摸反馈机制
当我们的手指从触摸屏幕上的各种View,开始到这个点击事件的结束到底经历了什么,我们来详细分析下。事件类型触摸事件会有三种类型: int action = MotionEventCompat.getActionMasked(event); switch(action) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: break原创 2021-11-17 00:23:06 · 1508 阅读 · 0 评论 -
Jetpack-paging3看会了吗
听到Paging3的时候,觉得这是个分页加载库,自己早就封装了一套,可学可不学吧。后来看到很多项目有用到这个,就想着它到底哪里方便了。平时在加载数据的时候需要手动实现这些功能:跟踪用户滑到末尾请求确保多个请求不会同事触发对数据进行缓存跟踪加载状态,在列表上显示加载状态,如果有失败的加载,可重试的加载而在paging3中则不需要考虑滑动底部的时候发起一个网络请求加载下一页数据,它是一个全新的思路,在学习paging3的时候关联了协程、Flow、DiffUtil、MVVM等知识点。首先我们先了原创 2021-08-26 22:27:05 · 459 阅读 · 0 评论 -
Kotlin协程的前世今生
Kotlin协程的前世今生CoroutineScope 协程作用域CoroutineContext 协程上下文Job组合上下文中的元素调度器协程取消和超时协程异常协程中有几个概念: CoroutineScope, Job,CoroutineContextCoroutineScope 协程作用域异步作用域函数创建作用域有两种创建方式,常用的launch只是CoroutineScope的扩展函数//没有返回结果public fun CoroutineScope.launch( context原创 2021-08-22 15:34:25 · 165 阅读 · 0 评论 -
音视频开发-音频尝鲜
在安逸的知识领域待久了,人就变得迷茫的。接触了音视频开发,打算一步步学起。Android预备的知识有音视频的基础知识、openGl的知识和最主要的Ffmeng知识。音视频的基础AndioRecord是Android系统提供的用于实现录音的功能类AudioTrack可以完成Android平台上音频数据的输出任务MODE_STREAM:在这种模式下,通过write一次次把音频数据写到Audi...原创 2020-03-24 17:10:42 · 248 阅读 · 0 评论 -
Android手势认知
一、概念 手势:其实是指用户手指或触摸笔在屏幕上的连续触碰行为,Andoird对两种手势行为都提供了支持: Andorid提供了手势检测,并为手势检测提供了相应的监听器; Android允许开发者添加手势,并提供了相应的API识别用户手势; 二、手势检测 Gesture类:代表了一个手势检测器; GestureD原创 2015-12-03 19:54:20 · 512 阅读 · 0 评论 -
Kotlin-初步认识
参考: - Kotlin Primer·第二章·基本语法 - 用 Kotlin 开发 Android 项目是一种什么样的感受? - 快速上手 Kotlin 的 11 招基本语法语句in关键字 判断一个独享是否存在某一个区间内,可以使用in关键字when表达式智能类型推荐 判断一个对象是否为一个类的实例,可以使用is关键字空值检测//当data不为空的时候,执行语句块data?.原创 2017-09-28 10:29:19 · 436 阅读 · 0 评论 -
RecycleView.ItemDecoration全面了解
前言在开发的时候,如果你用到的是RecycleView,就常常会有下划线的视觉。平时我们就直接在item视觉里就加上了上划线,但今天结ItemDecoration类,会更快速地实现我们的表现效果。##使用在自定义ItemDecoration通常要复写其3个方法public class TestDividerItemDecoration extends RecyclerView.ItemDe...原创 2018-11-12 00:21:59 · 439 阅读 · 0 评论 -
Gradle打包入坑
现在讲讲Gradle打包apk的事情配置资源文件在做马甲包的时候,一般都是每个apk有不同的icon、不同的名字及界面上显示的文字也不同。往往这样子就需要有额外的资源文件。可以在src下建立新的目录来存放对应的资源文件,例如:命名与渠道名相同, src下,与 main 同级。shenzhen 中 res 下的文件目录和 main/src/res相同。可以在main下面建立个文件夹,比...原创 2018-11-12 10:41:05 · 519 阅读 · 0 评论 -
Android开发-AccessibilityService的操作姿势
我们来了解下Android的辅助功能AccessibilityService,Android提供这个类的初衷是辅助人们去使用Android设备,但通过我们的了解,才发现它的作用不仅仅只有这样。我们可用它进行自动化抢红包,自动安装的等等。AccessibilityService运行在后台,并且能够收到由系统发出的一些事件(AccessibilityEvent,这些事件表示用户界面一系列的状态变化)...原创 2019-01-06 23:23:51 · 915 阅读 · 0 评论 -
React Native学习步骤
总结的资料 http://www.jianshu.com/p/454f2e6f28e9 (React Native 高质量学习资料汇总) http://www.jianshu.com/p/fd4591a978ba (React Native学习指南) https://github.com/reactnativecn/react-native-guide (React Nat原创 2017-02-25 17:59:33 · 702 阅读 · 0 评论 -
Android项目模板化
目录地址首先了解模板的文件结构,先看一个自带的模板“Empty Activity”,目录地址是plugins/android/lib/templates/,里面就有我们需要的模板。目录结构在目录下我们可以依次看到如下文件:globals.xml.ftlrecipe.xml.ftltemplate.xmltemplate_blank_activity.pngroot/src/app_pack原创 2017-01-22 13:36:33 · 744 阅读 · 0 评论 -
贝塞尔曲线的使用
什么是贝塞尔曲线它主要用在Andorid中某些自定义VIew的时候需要绘制某些曲线。它只要有些名词介绍:数据点:通常指一条路径的起始点和终止点控制点:控制点决定可一条路径的弯曲轨迹,根据控制的点的个数,贝塞尔曲线被分为一阶贝塞尔曲线(0个控制点)、二阶贝塞尔曲线(1个控制点)、三阶贝塞尔曲线(2个控制点) 在平时开发中主要掌握二阶和三阶贝塞尔曲线二阶贝塞尔曲线 由上图看,P0是起点,P原创 2017-01-22 13:28:13 · 2016 阅读 · 1 评论 -
开源中国学习(首页新闻资讯类的实现)
主页面的页面切换,使用了MyFragmentTabHost进行切换,首先建立五个MianTab,依次创建VIew添加进去; 开源中国源码学习UI篇(一)之FragmentTabHost的使用分析public enum MainTab { NEWS(0, "综合", R.drawable.tab_icon_new, NewsViewPagerFragment.clas原创 2016-06-18 22:44:07 · 1374 阅读 · 0 评论 -
Android中监听EditText文本输入
class EditChangedListener implements TextWatcher { private CharSequence temp;//监听前的文本 private int editStart;//光标开始位置 private int editEnd;//光标结束位置 pr原创 2015-12-04 18:26:17 · 428 阅读 · 0 评论 -
带有ListView的界面无法通过手势左右滑动切换界面问题解决办法
带有ListView的界面无法通过手势左右滑动切换界面问题解决办法 问题描述: 在做 OnGestureListener 滑动切换窗口的时候,会遇到这样的问题。就是当界面中含有 ListView 的时候,OnGestureListener 的左右触屏滑动就被 ListView 自己吃掉了。 问题分析: 在Android系统中,事件的分发和响应都按照一定的优先级仅仅有条的进行着。原创 2015-12-04 00:15:19 · 627 阅读 · 0 评论 -
Android中dp和px之间进行转换
在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了设置px的方法,例如setPadding,并没有提供设置dp的方法。这个时候,如果需要设置dp的话,就要将dp转换成px了。以下是一个应用类,方便进行px和dp之间的转换。[j转载 2015-12-14 17:23:43 · 506 阅读 · 0 评论 -
实现Android图片轮播
轮播的实现利用定时器,实现循环轮播,很简单;只需在定时器的消息里加如下代码即可: int count = adapter.getCount(); if (count > 1) { // 多于1个,才循环 int index = viewPager.getCurrentItem(); index = (index + 1) % cou原创 2015-11-21 20:51:45 · 819 阅读 · 0 评论 -
ToolBar的使用
来源 http://blog.mosil.biz/2014/10/android-toolbar/ 这篇文章因为是台湾人写的,语言风格很别致。本文在原文的基础上做了一些微调(主要是繁体字的问题)。今年(2014) 的 google i/o 发表令多数人为之一亮的 material design,而 google 也从「google i/o 2014」 开始,大家也陆陆续续地看到其更转载 2015-11-13 10:32:59 · 468 阅读 · 0 评论 -
开源中国学习(语音实现)
、Android仿微信录音功能,自定义控件的设计技巧 开源中国Android客户端语音动弹界面实现 - 主界面主要分为文字的写入EditText空间,下一行是语音显示界面,加了动画效果,最后是一个自定义控件RecordButton. - 其中录音部分把他提取出来封装了。public class RecordButtonUtil { private final static String原创 2016-06-18 22:49:47 · 570 阅读 · 0 评论 -
开源中国(三)
android:descendantFocusability用法简析 在遇到因ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,而导致item没有获取焦点可设置android:descendantFocusability=”blocksDescendants”的属性消息通知在MianActivi原创 2016-06-18 22:51:47 · 482 阅读 · 0 评论 -
CoordinatorLayout与Behavior总结
在项目中遇到了Behavior的使用,觉得很神奇,就记录一下。 Behavior大致介绍是:CoordinatorLayout是用来卸掉其字VIew们之间动作的一个父View,而Behavior就是用来给CoordinatorLayout的子View们实现交互。Behavior 在自定义Behaviors的时候,就要熟悉两个元素Childs和deoendency。其中要改变行为的那个View就原创 2017-01-22 13:21:27 · 647 阅读 · 0 评论 -
Lambda表达式总结
以下有5种表达式: 1. 不需要参数,返回为5 () -> 5 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2*x 3. 接收2个参数(数字),并返回它们的差值 (x, y) -> x-y 4. 接收2个int 型整数,返回他们的和 (int x, int y) -> x+y 5. 接收一个String对象,并在控制台打印,不返回任原创 2016-07-20 22:30:29 · 622 阅读 · 0 评论 -
Android优秀开发资源
http://www.androidchina.net/5330.htmlAndroid Frameworks源码https://github.com/android/platform_frameworks_base开源项目1.philm:https://github.com/chrisbanes/philm2.iosched(Google I/O项目):https://git转载 2016-08-08 11:19:37 · 1173 阅读 · 0 评论 -
csdn如何转载别人的文章
1、找到要转载的文章,用chrome浏览器打开,右键选择审查元素2、在chrome中下方的框里找到对应的内容,html脚本中找到对应的节点,选中节点,网页上被选中内容会被高亮显示,然后右键菜单选中 Copy as HTML3、进入个人”管理博客”主界面,选择”写新文章“,编辑界面的地方选择工具条上的源代码,将chrome中复制的内容贴进来转载 2016-08-01 15:12:18 · 364 阅读 · 0 评论 -
Android 让Retrofit与Realm、Parceler一起使用
英文原文: Using Retrofit with Realm and Parceler 。Retrofit是一个绝大多数app都会考虑使用的一个库。如果你的app需要一个后端,那么你就应该使用Retrofit去和RESTful服务交互。它的使用极为简单,你可以瞬间就让网络运行起来,Retrofit自动把获取的响应结果解析到你的model对象中。通常,你还会考虑把从后端获取的某些转载 2016-08-01 15:10:18 · 961 阅读 · 0 评论 -
Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
原文转自http://blog.youkuaiyun.com/vipzjyno1/article/details/25248021在Android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等。下面就来说说经常会使用到通知机制中的通知栏框架(Notificait转载 2016-08-03 16:07:34 · 675 阅读 · 0 评论 -
开源年中国(五)清除缓存
删除数据库和缓存文件下的数据/** * 清除app缓存 * * @param activity */ public static void clearAppCache(Activity activity) { final Handler handler = new Handler() { @Override原创 2016-06-19 11:15:30 · 541 阅读 · 0 评论 -
开源中国(四)代码片段
代码片段Dialog,底下弹出栏的写法:public class ImageMenuDialog extends Dialog implements android.view.View.OnClickListener { public interface OnMenuClickListener { void onClick(TextView menuItem);原创 2016-06-18 22:52:59 · 658 阅读 · 0 评论 -
欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-11-10 19:58:34 · 315 阅读 · 0 评论