FMouse是啥子?

FMouse 是我倒腾的一个开源项目。目的是实现 在能采集用户触控的终端上,实现远程终端的触控操作。

背景:过年回家,到家之后兴高采烈,拿出电脑。才发现鼠标没带。触控按板又坏掉了,真是大写的尴尬。看着旁边的手机,突然灵光一闪,既然手机有陀螺仪可以计算移动的距离,为什么不用手机作为电脑的人体设备输入装置了?这就是FMouse的模式之一体感模式。接下来就开始从技术上讨论,这样到底能不能实现,如何实现,FMouse的具体运用场景有哪些?

FMouse运用场景:主要的运用场景是,短距离,或者远距离,实现对电脑的操控(鼠标,键盘)。目前FMouse主要有 两种模式,一种模式是体感模式,也就是利用陀螺仪,捕捉轨迹,通过轨迹与与鼠标键盘动作的绑定实现对电脑的控制,如在会场进行PPT的讲演,如果你要离开讲台,同时控制PPT,那么你就需要一直激光笔(通常激光笔自带这一功能,当然还有无线鼠标)。可是当你需要 进行一些比较负责的操作时,这个是时候激光笔,无线鼠标就显得捉襟见肘了。如回到桌面打开指定的某个文件,建设你想在屏幕上输入“Hello World”,这也不可避免的让你必须回到电脑旁。现在有了FMouse,你可以通过体感模式中的的轨迹 (如:向左挥动,绑定为上一张PPT)。通过FMouse的触摸模式,实现鼠标的精确控制,实现打字操作(就如你在操作手机一样,只不过这个手机是个PC)。

FMouse模式:

    1.体感模式——捕捉轨迹,作为输入。如果你玩过VR的手柄,我想这很容易让你理解体感模式的意思。

    2.触控模式——touch时间捕捉,作为输入。你是如何操作一部拥有电容屏手机的,那么在FMouse下,你就如何操作一台远程的PC

FMouse架构:


FMouse目前进度:

2018年3月21日——FMouse作为开源项目,很高兴有感兴趣的小伙伴能参入进来。目前离第一个稳定的发布版本非常遥远,在做通讯协议的优化 。

<think> 我们正在讨论的是Android系统中应用附加(Attach)的过程。用户询问“应用完全附加的含义”,结合之前的代码片段和引用内容,我们需要解释这个概念。 在Android系统中,应用附加是指系统服务(如ActivityManagerService)将新启动的应用进程绑定到系统框架的过程。这个过程包括: - 建立进程间通信(IPC)通道 - 传递必要的配置信息 - 初始化应用运行环境 “应用完全附加”意味着该进程已经完成以下关键步骤: 1. **绑定应用**:系统通过`bindApplication()`将应用进程与AMS关联 2. **组件初始化**:创建并初始化Application对象,调用`onCreate()`[^3] 3. **资源就绪**:加载APK资源,建立ClassLoader 4. **进程可调度**:进程进入可运行状态,能接收广播/启动组件 引用[4]中提到的附加属性机制展示了类似的“绑定”概念:将额外属性(如`PasswordHelper.Password`)附加到已有控件上,扩展其功能。类似地,系统将框架能力“附加”到应用进程上。 $$ \text{应用启动时间} = T_{\text{fork}} + T_{\text{attach}} + T_{\text{onCreate}} $$ 其中$T_{\text{attach}}$就是附加阶段耗时,包含进程间通信和数据传输。 当配置`mEnableWaitForFinishAttachApplication=false`时(如原始代码),系统会跳过等待直接执行附加操作,这适用于正常启动场景以优化速度。若设为true,则通常用于: - 调试应用启动死锁 - 热修复框架资源 - 多进程协同启动[^1][^4] --- §§相关问题§§ 1. 应用附加过程中涉及哪些关键IPC调用?[^2] 2. `Application.onCreate()`在附加流程的哪个阶段执行?[^3] 3. 如何监控应用附加阶段的性能指标?[^1] </think> ### 应用完全附加(Application Full Attach)的含义解析 在 Android 系统框架中,“应用完全附加”指新启动的应用进程完成与系统核心服务(如 ActivityManagerService)的深度绑定过程。这个过程包含三个关键阶段: 1. **IPC 通道建立** - 系统通过 Binder IPC 建立进程间通信管道(引用[2]中提到的结构化通信机制[^2]) - 实现核心系统服务与应用的指令传输能力 $$ \text{SystemService} \xrightarrow{\text{Binder IPC}} \text{Application Process} $$ 2. **运行环境初始化** - 加载应用资源(APK/DEX) - 创建 `Application` 对象并调用其 `onCreate()` - 初始化类加载器(ClassLoader) - 建立安全管理沙箱(引用[4]的安全隔离机制[^4]) 3. **生命周期激活** - 注册 `ContentProvider` - 绑定 `Service` 和 `BroadcastReceiver` - 准备接收 `Intent`(如图示流程): ```mermaid graph LR A[进程创建] --> B[附加系统服务] B --> C[初始化Application] C --> D[激活组件] D --> E[接收START指令] ``` ### 核心价值与场景 | 场景 | 是否需完全附加 | 原因说明 | |-----------------------|----------------|--------------------------------------------------------------------------| | 正常应用启动 | ✅ 必需 | 保证四大组件可被系统调度 | | 热修复框架 | ⚠️ 选择性 | 引用[1]的全局配置机制[^1],部分热补丁只需附加基础环境 | | 多进程协作 | ✅ 必需 | 跨进程通信需完整上下文(引用[2]的附加函数结构化数据交换[^2]) | | 即时任务执行 | ❌ 不需要 | 引用[3]的轻量级特性机制[^3],如后台JobScheduler只需最低限度绑定 | ### 代码中的控制逻辑 原始代码片段: ```java if (!mConstants.mEnableWaitForFinishAttachApplication) { finishAttachApplicationInner(startSeq, callingUid, pid); } ``` - **`mEnableWaitForFinishAttachApplication=false`** 立即触发完全附加(跳过等待阶段),适用于: - 冷启动加速(减少 200-400ms 延迟) - 高优先级应用(如前台服务) - **`mEnableWaitForFinishAttachApplication=true`** 延迟附加过程,适用于: - 调试诊断(引用[4]的附加属性监控[^4]) - 资源依赖场景(如等待共享库加载) ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值