Tech & Life

Tech & Life

Thoughts, Technologies and Talent.

Android Input 输入事件日志

Android Input 输入事件日志

一、日志关键字 关键日志:InputReader|InputDispatcher|InputEvent Android Input指的是输入事件,主要是触摸滑动,当然还包括类似蓝牙外设的输入。Input涉及到的主要模块: * InputReader:负责从硬件获取输入,转换成事件(Event),并传给Input Dispatcher。 * InputDispatcher:将InputReader传送过了的Events分发给合适的窗口,并监控ANR。 * InputManagerService:负责Input和InputDsitpatcher的创建,并提供Policy用于Events的预处理 * WindowManagerService:管理InputManager与View(Window)以及ActivityManager之间的通信 * View and Activity:接受按键并处理 * AcitivityMangerService:ANR处理 它们之间的关系如下图所示(黑色箭头代表控制信号传递方向,而红色箭头代表用户输入数据的传递方向)。 Inpu
4 min read
AndroidManifest 内部标签属性

AndroidManifest 内部标签属性

一、基本标签 基本标签 1. version: xml的版本 encoding: 编码格式 2. AndroidManifest 每一个Android应用都包含一个manifest文件,即AndroidMnifest.xml,用于配置应用的各方面信息; 3. manifest 是AndroidManifest.xml根节点,必须包括一个,并且需要设置xmlns:android和包属性; 4. package 指定本应用程序的包名 5. sharedUserId 表明数据权限,默认情况下,Android系统会给每个apk分配一个唯一的UserId,所以是默认禁止不同apk访问共享数据的; 若要共享数据,第一可采用偏好存储,第二可采用sharedUserId,讲不同apk的sharedUserId都设为一样,则这些apk就可以共享数据; 6. sharedUserLabel 共享的用户名,设置sharedUserId才
30 min read
Android 四大组件

Android 四大组件

Android Manifest中声明组件 Manifest.xml文件中包含四部分 * 软件包名称和id * 应用组件,四大组件中的内容 * Permission权限 * 兼容性,包括硬件和软件 加载和解析 系统启动时,PMS会对通用安装目录进行扫描和APK安装,并进行package parse 2、package parse的过车用中有个阶段是Xml Parse,会将AndroidManifest清单中的信息进行解析 3、AndroidManifest中解析出来的信息会放到Settings中,若应用卸载删除会从Settings中将该应用相关信息删除 4、安装新的apk时会类似以上步骤 Activity组件 ——用户操作的可视化界面 继承Context,可以设置主题。 启动模式 * Standard 标准模式 * SingleTop Activity在栈顶就复用 * SingleTask 栈中仅保持一个Activity * SingleInstance 单例模式 生命周期 onCreate -> onStart -> on
2 min read
JVM——转载一篇虚拟机的介绍

JVM——转载一篇虚拟机的介绍

转载自:https://juejin.im/post/5e1505d0f265da5d5d744050 。 前言 如果在文中用词或者理解方面出现问题,欢迎指出。此文旨在提及而不深究,但会尽量效率地把知识点都抛出来 一、JVM 的基本介绍 JVM 是 Java Virtual Machine 的缩写,它是一个虚构出来的计算机,一种规范。通过在实际的计算机上仿真模拟各类计算机功能实现··· 好,其实抛开这么专业的句子不说,就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。 1.1 Java 文件是如何被运行的 比如我们现在写了一个 HelloWorld.java 好了,那这个 HelloWorld.java 抛开所有东西不谈,那是不是就类似于一个文本文件,只是这个文本文件它写的都是英文,而且有一定的缩进而已。
36 min read
Linux基础

Linux基础

一、初识linux 1. linux系统组成 * linux系统内核 * 内核提供系统最核心功能,如调度cpu、调度内存、调度文件系统、调度网络通讯、调度IO等 * 系统级应用程序 * 可以理解为出厂自带程序,如文件管理器、任务管理器、图片查看、音乐播放等 linux系统发行版:ubantu、centos、debian 二、linux基础命令 1. 目录结构 树形结构,linux没有盘符概念,所有文件都在根目录/下。 windows中层级关系用 \ 表示;linux中层次关系用 / 表示,开头的 / 表示根目录 2. 命令入门 command [-option] [parameter] * command 命令本身 * -option 控制命令的行为细节 * parameter 命令参数,多用于命令的指向目标 3. 目录切换 cd
10 min read
MyBatis

MyBatis

MyBatis 1. 什么是MyBatis * MyBatis是一款优秀的持久层框架,用于简化JDBC开发 * http://www.mybatis.cn/ 1.1 持久层 * 负责将数据保存到数据库的一层代码 * JavaEE三层架构:表现层、业务层、持久层 1.2 框架 * 框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型 * 在框架基础之上构架软件编写更加高效、规范、通用、可扩展 1.3 JDBC缺点 1. 硬编码 * 注册驱动,获取连接 * SQL语句 2. 操作繁琐 * 手动设置参数 * 手动封装结果集 1.4 MyBatis简化 2. MyBatis快速入门 查询user表中所有数据 1. 创建user表,添加数据 2.
7 min read
JVM——Java虚拟机

JVM——Java虚拟机

1. 内存结构 1.1 程序计数器 定义:Program Counter Register程序计数器(寄存器) 作用:记住下一条JVM指令的执行地址 特点:线程私有;不会内存溢出。 1.2 虚拟机栈 Java Virtual Machines Stacks(Java虚拟机栈) * 栈-每个线程运行需要的内存空间,每个栈由多个栈帧(Frame)组成 * 栈帧-每个方法运行时需要的内存 * 每个线程只能有一个活动栈帧,对应当前正在执行的那个方法 问题辨析: 1. 垃圾回收是否涉及栈内存?不需要,方法调用结束就会弹出栈 2. 栈内存分配越大越好吗?-Xss size设置栈内存。物理内存一定,栈内存越大,线程数越少。 3. 方法内的局部变量是否线程安全?局部变量安全,引用的对象未必。 1.2.1 栈内存溢出StackOverFlow
14 min read
Java并发编程

Java并发编程

并发编程 线程与进程 进程和线程的概念 进程 * 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。进程就算用来加载指令、管理内存、管理IO的 * 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。 * 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程。 线程 * 一个进程之内可以分为多个线程 * 一个线程就是一个指令流,将指令流的一条条指令以一定顺序交给CPU执行 * Java中,线程作为最小调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器。 并发和并行的概念 并行(parallel)是同一时间动手做(doing)多件事情的能力。 并发(concurrent)是同一时间应对(dealing with)多见事情的能力。 线程基本应用 应用之异步调用 从方法调用的角度来讲,如果 * 需要等待结果返回,才能继续运行就是同步 * 不需要等待结果返回,就能继续运行就算异步 应用之提高效率
43 min read
RabbitMQ

RabbitMQ

消息中间件 RabbitMQ RabbitMQ Tutorials MQ基础 1.MQ基本概念 MQ 全程 Message Queue(消息队列),是在消息传输过程中保存消息的容器。多用于分布式系统之间进行通信。 优势: * 应用解耦 * 异步提速 * 削峰填谷 劣势: * 系统可用性降低 * 系统复制度提高 * 一致性问题 1.1小结 使用MQ需要满足什么条件: 1. 生产者不需要从消费者处获得反馈。引入消息队列之前的直接调用,其接口的返回值应该为空,这才让明明下层的动作还没做,上层却当动作做完了继续往后走,即所谓异步成为了可能。 2. 容许短暂的不一致性。 3. 收益超过加入MQ、管理MQ成本。 常见MQ产品:RabbitMQ、RocketMQ、kafka AMQP,即Advanced Message Queueing Protocol(高级消息队列协议)是应用层协议的开放标准,为面向消息的中间件设计。 AMQP
15 min read
排序算法
Technology

排序算法

目录 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 计数排序 基数排序 冒泡排序 初步实现 两次完整遍历数组 1. 依次比较数组中相邻两个元素大小,若a[i]>a[i+1]则交换两个元素,两两都比较一遍称为冒泡,结果是让最大的元素排至最后。 2. 重复以上步骤,直到整个数组有序。 减少比较次数 两次循环,一个遍历length次,另一个遍历length - i次。 减少冒泡次数 一次遍历后未发生交换时说明数组有序。 进一步优化 最后一次交换的索引可以作为下一轮冒泡的比较次数。若为零,表示整个数组有序。 public static void main(String[] args){ int n = a.length - 1; for(
5 min read
MySQL 学习笔记
Technology

MySQL 学习笔记

DDL 数据定义语言 用来定义数据库对象(数据库、表、字段) 数据库操作 # 查询所有数据库 SHOW DATABASES; # 查询当前数据库 SELECT DATABASE(); #创建 CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; # 删除 DROP DATABASE [IF EXISTS] 数据库名; # 使用 USE 数据库名; 表操作 # 查询 # 查询当前数据库所有表 SHOW TABLES; # 查询表结构 DESC 表名; # 查询指定表的建表语句 SHOW CREATE TABLE 表名; # 创建 CREATE TABLE
28 min read
皖ICP备2023003517号-1