自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Humphrey0313

一名北漂程序员的学习记录博客

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 Binder(四)以AMS为例学习binder的请求过程

ServiceManager服务启动后,通过BINDER_SET_CONTEXT_MGR命令将自己设置为ContextManager,这样后面启动的服务就可以通过ServiceManager来管理,每当Client需要使用Server的功能时,首先通过ServiceManager获取这个Server服务,然后再调用Server的相关功能。系统启动时,SystemServer.java中的run()方法会启动系统的一些服务,会依次调用下面三个方法。

2024-07-18 17:48:23 185

原创 Binder框架(二) ServiceManager初始化

开机由init进程解析init.rc文件启动servicemanager.rc。版本:BINDER_VERSION, 设置最大线程 BINDER_SET_MAX_THREADS 等等。ioctl()通过BINDER_SET_CONTEXT_MGR命令,将SM设置到binder驱动中。1.2 通过mmap映射设备的内存空间到ServiceManager进程中。1.3 设置ServiceManager为context manager。创建manager,并且把自己设置到SM中。

2024-07-15 15:46:57 341

原创 Binder框架(二) binder初始化

//linux标准设备之一,也就是说binder实际上是一种miscdevice。//设备操作方法集合 --->下面的binder_fops。const struct file_operations binder_fops = { //与用户控件操作binder有关的三个成员。//当前设备的devices结构。//次设备号,主设备号已经敲定是10了,后面我们跟进代码看一下。(代码位置:kernel/drivers/android/binder.c)

2024-07-15 14:35:28 273

原创 Binder框架(一)基础概念

这样,Android系统可以通过添加一个内核模块运行在内核空间,用户进程之间的通过这个模块作为桥梁,就可以完成通信了。所以,在 Android 系统中,这个运行在内核空间的,负责各个用户进程通过 Binder 通信的内核模块叫做 Binder 驱动。进程隔离机制的主要实现方式是使用虚拟地址空间,两个进程各自的虚拟地址不同,就实现了内核空间和用户空间的隔离。进程是一个在内存中运行的应用程序,每个进程都有自己独立的一块内存空间。为了系统的安全性考虑,内核空间可以执行CPU的任何指令,普通空间会受限。

2024-07-12 18:28:39 280

原创 音频基础知识

是指人耳对声音的主观感受,‌即声音的响亮程度,‌它反映了人耳对声音强弱的感觉。‌响度的大小不仅与声音的振幅(‌即音量)‌有关,‌还受到音调、‌音色、‌音长等因素的影响。‌在客观评价上,‌响度与声音的振幅大小直接相关,‌即物体振动时所产生的压力(‌声压)‌越大,‌人耳感受到的响度也就越大。编码的目的是压缩音频数据,以减小文件大小或传输带宽,并在尽可能减少质量损失的情况下实现高效的存储和传输。量化是将采样得到的连续模拟信号转换为离散的数字信号的过程。量化的目的是将连续信号的无限可能性转换为有限的离散值。

2024-07-10 18:41:47 328

原创 Linux学习笔记(三)文件权限

Linux权限分为r(读取)、w(写入)、x(执行)。-rw-------. 1 sun root 878 6月 3 09:50 App.java。-rwxrw-r--. 1 sun root 878 6月 3 09:50 App.java。drwxr-xr-x. 2 sun root 6 7月 5 14:05 公共。drwxr-xr-x. 2 sun root 6 7月 5 14:05 模板。drwxr-xr-x. 2 sun root 6 7月 5 14:05 视频。

2024-07-08 11:57:04 397

原创 Linux学习笔记(二)账户和组

基本组:账户id,被称为GID。用户只能加一个基本组。0代表超级管理员,root账号。userdel -r admin 删除用户以及所有相关文件。passwd admin 为admin设置新密码。userdel admin 删除用户admin。创建用户名tom,失效时间是2099年。用 户:用户id,被称为UID。-s 修改账户登录的Shell。附加组:用户能加多个基本组。usermod 修改账户信息。创建id为1000的基本组。id 用户名or组名。-d 修改账户家目录。-u 修改账户UID。

2024-07-08 11:20:45 331

原创 Linux学习笔记(一)

ln -s /text/a.txt b.txt 创建文件或目录软链接,相当于快捷方式,可以跨分区,但是源文件不能删除。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、,这个老祖宗,最早是商用的,不同计算机公司有自己的硬件,所以开发自己的Unix系统,当时还没有协议一说。ln /text/a.txt b.txt 创建文件或目录硬链接,不能跨分区,源文件能删除。less a.txt 分页查看文件内容。最常见的gg首行,G末尾,j下一行,k上一行。

2024-07-05 17:47:18 785

原创 c++(九)string类用法STL

string s();//构造一个空字符串//复制s所指向的字符序列//复制s所指向的字符序列的前n个字符//生成n个c字符的字符串//生成str的复制//复制str中字符位置pos开始并且跨越len个字符的部分。

2024-07-04 11:59:36 223

原创 c++(八)类的继承

C++中的继承是面向对象编程中最为基础和重要的特性和理念之一。通过继承,程序员可以从已有的类中派生出新的类,从而在不破坏原有代码的情况下,扩展、修改和重用现有的代码。父类、基类:被继承的类子类、派生类:继承父类后衍生的具有父类成员属性和函数成员的子类。

2024-07-01 18:30:35 336

原创 c++(七)内存模型

注意:c++有单定义原则。定义全局变量后,其他文件定义重名的变量会报错,为了防止定义冲突,单个文件内的静态变量用static修饰即可。其他静态存储类别的作用域,只能是单个翻译单元或所声明的函数内。:函数外定义的变量,或用static修饰的变量,在程序运行中都存在。定义:即数据不同的存储方式,决定的数据保留在内存中的时间。:函数参数和函数内声明的变量。函数开始时执行,结束时内存被释放。:使用new修饰的,直到delete或程序结束被释放。的变量,作用域范围只是代码块内。定义:即数据在不同文件间的共享能力。

2024-06-25 15:04:51 349

原创 c++(六) 类和对象

我们常见的+、-、*、/除了字面功能,还能用于其他功能,如*可以声明指针等。是另一种形式的多态性。比如以下代码,重载了运算符加号+ ,实现了时间累加功能。和普通数组的使用类似。

2024-06-24 18:33:13 200

原创 c++ (五) 函数模板

c++函数模板,可以理解为java中的泛型。优点是节省了代码量,提高代码效率,减少了函数定义时可能发生的错误。和函数重载一起可以实现“重载模板”对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及他们的重载版本。显示具体化的原型和定义应以template打头,并通过名称支出类型。具体化优先于常规模板,而非模板函数优先于具体化和常规模板。对于第三代具体化,C++98标准选用了下面的方法。编译器使用模板为特定类型生成函数定义时,就是。

2024-06-20 16:54:51 138

原创 c++(四)内联函数、引用变量、默认参数

2.类型标识符的一部分,用来声明引用,作为函数形参,int a;意思是指针变量可以指向不同的变量地址,但是引用只能初始化的声明来设置,不能通过赋值设置。方式是用inline关键字修饰为内联函数,直接把函数声明+函数体一起写在函数原型处。1.地址运算符,指示变量的地址,如int * p = &var;情况一:代码量大,耗时长,与调用函数时间相差无几;情况三:编译器没有该特性。是函数代码替换函数调用,情况二:有递归调用情况;是提升程序的执行速度。

2024-06-14 16:58:28 182

原创 c++(三)函数原型、函数参数、函数返回值、函数指针

不需要修改数组:void f_no_change(const double[], int n);要修改数组内容:void f_modify(double d[], int n);const修饰的指针,不能通过指针修改原变量的值。const类型的指针,不能移动指针指向别的变量。唯一避免使用的方法是在使用调用函数前定义,但是往往不总是可行的。总结:const修饰的变量,不能定义指向它的指针。编译器正确处理函数的返回值;编译器检查参数数目是否正确;编译器检查参数类型是否正确;

2024-06-07 11:47:33 160

原创 c++(二)字符串库函数、文件IO读取和写入、二维数组

数组用strcmp函数,string对象可以直接用关系运算符。相对来说string对象更简单,更直观。

2024-06-06 18:33:54 203

原创 c++ (一)输入输出、数组、字符串、结构、共用体、枚举

(学习方法:理论-实践-经验-理论-实践-经验······)

2024-06-04 11:36:22 230

原创 Activity的生命周期

Activity意外终止,会调用onSaveInstanceState保存view的数据和状态,此时Activity会重新创建,并调用onRestoreInstanceState恢复数据和状态。MainActivity: onStart______________________________________>(启动,可见)PS:onPause(),onStop() 不要写耗时操作,这样新Activity能尽快显示出来并切换到前台。结论:旧Activity先onPause(),新Activity再启动。

2024-04-22 18:39:18 399 1

原创 Kotlin(二)类和对象

没有函数名,函数体在一对花括号中,后边必须写圆括号调用,匿名函数不需要return,默认返回函数最后一行的结果。d、run,对象引用是this,返回值是lambda表达式结果。e、 with,对象引用this,返回值是lambda表达式结果。a、let 对一个非空对象执行lambda表达式,简化了重复的对象名,省略了非空检查。infix修饰,省略了点和括号,但是函数只能有一个参数,不能有默认值。c、apply,对象引用是this,返回值是对象。b、also,对象引用是it,返回值也是对象。

2024-04-22 16:01:24 248 1

原创 Android 常见Bug及其解决办法

1.app在debug调试结束后,再次以普通方式运行时,一直提示“ wating for debugger”,界面空白只能强推。解决办法:断开adb连接,重试;如果还是不行,重启手机后解决。解决办法:把自己电脑的热点关掉重新clean、build。2.你的主机中的软件中止了一个已建立的连接。

2023-12-18 10:16:51 243

原创 泰拉瑞亚tModLoader自己开服联机(可加灾厄瑟银mod)

一、前期准备1.泰拉瑞亚steam版本:1.4.3.62.TModLoader版本:v2022.5.103.26下载地址:Releases · tModLoader/tModLoader · GitHub3.灾厄版本:Calamity2021.7.6(自行下载)4.汉化模组:Localizer_v1.5.0.19.tmod(自行下载)二、服务器购买(腾讯云120R/年)服务器参数:Ubuntu系统,CPU: 2核 内存: 4GB,60GB SSD...

2022-06-10 16:24:32 18642

原创 Mac M1 配置adb命令

1.进入home页面cd ~2.创建 bash——profile文件touch .bash_profile3.打开文件并编辑open -e .bash_profileexport PATH=${PATH}:/Users/dwtedx/Documents/android/sdk/platform-tools/4.防止终端重启后adb 命令失效:touch .zshrc创建文件,编辑增加命令source ~/.bash_profile...

2022-04-27 10:11:46 3499

原创 Kotlin(一)变量 数据类型 控制流程

val(read only variable )只读变量,且只能赋值一次,不能修改。非常简洁的语法,还支持range类型的表达式(in downto until。const val 编译时常量,全局变量,只能赋值一次,必须在函数外初始化。var(variable) 变量,可以无限次赋值,生命周期仅限于函数内部。

2022-04-01 18:57:33 2211

原创 Android应用优先级

默认情况下,每个Android应用都独立运行在自己独立的进程中,而每个进程都运行着Android RunTime(ART). 内存和进程的管理由运行时处理,某些情况下,Android会释放资源杀掉app以遍优先级高的应用的流畅性。而杀死进程回收资源的顺序是由应用优先级决定的,应用的优先级又取决于优先级最高的组件。如果两个应用具有相同的优先级,那么运行时间最长的进程通常会被杀死。优先级次序如上图,解释如下:1.活动进程:可见且可以和用户交互的页面。如正在运行...

2021-11-22 18:18:41 2936

原创 Android打印日志太长显示不全问题

在日常开发过程种,我们经常会用到Android的打印类,Log.d(TAG,"Message");就可以打印日志信息,方便我们查看信息。 但当我们打印一些比较长的信息,如xml文件,网络请求的response等会遇到信息过长的问题,AndroidStudio会友长度限制,显示不全自动截断了。 这时就很恶心了,把数据复制到beJson等网站时格式不对导致显示不全,就很影响我们的工作。 为了解决这个问题,我们可以引入一个大神开发的日志工具类,可以...

2021-11-09 17:45:48 5306

原创 Java中try,catch,finally执行顺序

Java中try,catch,finally代码执行顺序是怎么样的?如果带有return又是怎样的?这是面试常考的一个问题。先给出结论:1.如果try中没有异常,则顺序为try→finally;如果try中有异常,顺序为try→catch→finally,并且异常之后的代码不会执行。2.当try或catch中带有return时,会先执行return前的代码,然后暂时保存需要return的信息,再执行finally中的代码,最后再通过return返回之前保存的信息。还要注意,如果return的

2020-12-22 11:44:10 4130 2

原创 弹性滑动的三种方式

普通滑动太过生硬,因此为了提升用户交互体验,需要增加一些弹性滑动,有以下三种方式,接下来一一介绍:1.使用ScrollerScroller本身并不能实现view滑动,它需要配合View的computeScroll方法才能完成弹性滑动的效果,它不断让View重绘,而每一次重绘距滑动起始时间会有一个时间间隔,通过时间间隔可以得出View的当前滑动位置,知道了滑动位置就可以通过scrollTo方法完成View的滑动。就这样View的每一次重绘都会导致View进行小幅度滑动,而多次小幅度滑动就组成了弹性滑动

2020-12-17 17:21:15 1100 1

原创 View的一些基本概念和位置参数

1.什么是View,View是Android中所有控件的基类,View是界面的控件的一种抽象。不管是简单的Button和TextView还是复杂的RelativeLayout和ListView,共同基类都是View。2.View的位置参数。View的位置由它的四个顶点决定。分别对应View的四个属性:top、left、right、bottom。top是左上角纵坐标、left是左上角横坐标、right是右下角横坐标、bottom是右下角纵坐标。注意:这些坐标是相对于父容器来说的,是1.

2020-12-16 11:30:12 822

原创 Android中Message的使用

Messenger,直译为信使,顾名思义,通过它可以在不同进程中传递Messenger对象传递数据。Messenger是一种轻量级的IPC方案,底层实现是AIDL,通过它的两个构造方法就能明显开出来。Messenger每次处理一个请求,所以不用考虑线程同步问题。实现一个Messenger有如下步骤:1. 服务端进程 创建Service处理客户端连接请求 创建Handler用于创建Messenger对象 在Service的onBind中返回Messenger对象底层的...

2020-11-24 17:49:40 1694

原创 Serializable、Parcelable序列化和反序列化

序列化是干什么的?序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化到存储设备,避免程序运行结束后对象就从内存里消失,另外变换成字节序列便于网络运输和传播:序列化:把Java对象转换为字节序列。 反序列化:把字节序列恢复为原先的Java对象。1. java序列化通过实现Serializable接口:public class Student implements Serializable { private static final long

2020-11-20 16:47:56 176

原创 Android多进程概念及注意事项

1.概念什么是IPC机制? IPC即 Inter-Process Communication ,进程间通信或跨进程通信,是指两个进程之间进行数据交互的过程。什么是线程? 线程是CPU调度的最小单元,是一种有限的系统资源。什么是进程? 进程指一个执行单元,在pc和移动设备上指一个程序或一个应用。一个进程可以包含多个线程,一个进程中可以只有一个线程,即主线程。主线程也叫UI线程,负责操作界面元素。耗时任务放在主线程会造成界面无法相应,即ANR(...

2020-11-19 11:46:50 168

原创 关于Activity的隐式启动

一个字符串,支持自定义,系统会设置一些自己的aciton,比如ACTION_SEND,发送邮件Action_CALL,呼叫指定的电话号码ACTION_DIAL,拨打电话等等。Intent中的action只有一个和过滤规则中的一个相同即可匹配成功。category要求intent中的所有的规则和intent-filter中的相同,即多对多的关系,否则匹配失败。经本人代码测试,intentFilter设置了action后,也必须设置category,否则会报匹配失败无法找到对应的activity。

2020-11-18 16:50:57 2935

原创 Activity的标记位Flags

Activity的Flags可以设定Activity的启动模式,还可以影响Activity的运行状态,大部分情况下,我们不需要为其指定标记位,因此对于flags理解即可。FLAG_ACTIVITY_NEW_TASK作用:为Activity指定 “singletask”模式,其效果在XML中设置launchMode为singleTask一致FALG_ACTIVITY_SINGLE_TOP作用:为Activity指定 “singleTop”模式,其效果和在XML中指定launchMode为.

2020-11-13 17:23:40 299

原创 Activity启动模式

Activity为什么需要启动模式,如果不设置启动模式,系统会重复创建同一个activity,这样不是很傻吗?安卓官方为了避免这个问题,设置了四个启动模式:standard、singleTop、singleTask、singleInstance,用于修改系统的默认行为。1.standard 标准模式,默认模式,activity会重复创建。2.singleTop 栈顶复用模式,如果目标activity位于栈顶,不会执行onCreate,onstart,会调用onNewInTent取出当前...

2020-11-11 11:42:26 135

原创 RN项目报错集合

AndroidStudio编译错误集合【1.0】1、Could not resolve all files for configuration ':react-native-camera:debugCompileClasspath 错误,无法build成功。解决方案:执行命令react-native-git-upgrade 。2、布局文件不能查看,提示 ‘design editor ...

2019-09-02 10:16:54 555

原创 Maven项目tomcat启动时异常

maven项目再运行时报错了,提示Address already in use: JVM_Bind<null>:8080解决办法时在后台查到占用端口的进程,并结束它。windows可以用cmd命了查询:netstat-ano,找到8080对应的进程pid,在任务管理器中找到并结束,重启maven。这是因为项目中同时有两个Tomcat导致的,为了避免此错误,需要更改Tomcat的端口号,...

2018-04-14 15:05:58 566

原创 Win10如何配置Java环境变量

新增变量名:【JAVA_HOME】设置变量值:【D:\Program Files\Java\jdk1.8.0_92】【jdk安装路径】(如果没有)新增变量名:【Path】设置变量值:【;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 】新增变量名:【CLASSPATH】设置变量值:【.;%JAVA_HOME%\lib\dt.jar;%JAVA_HO

2017-12-30 16:10:12 539

驱动精灵安装包无广告版

这个是我下载的驱动精灵安装包,有需要的小伙伴可以自行下载,该软件可在装完操作系统的时候安装或升级系统驱动。

2018-05-07

空空如也

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

TA关注的人

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