当前位置: 首页 > news >正文

【KO】 Android基础

以下是对这些 Android 相关问题的解答:

1. Activity 与 Fragment 之间常见的几种通信方式

  • 接口回调:Fragment 定义接口,Activity 实现该接口,Fragment 通过接口实例调用方法传递数据 。
  • 使用 Bundle:Fragment 可通过 setArguments(Bundle) 传数据给自身,Activity 可在创建 Fragment 时设置;也可结合 findFragmentById/findFragmentByTag 获取 Fragment 实例后,用 setArguments(一般在 Fragment 初始化时更合适)或直接调用 Fragment 公开方法传数据 。
  • ViewModel 共享:通过 ViewModel 存储和管理数据,Activity 和 Fragment 都关联同一 ViewModel 来实现数据共享与通信,适合数据需在生命周期变化时留存场景 。
  • LocalBroadcastManager(本地广播):Fragment 发送本地广播,Activity 注册接收,实现跨组件(这里主要是 Activity - Fragment 间间接)通信,不过现在用ViewModel 等方式更简洁,用得少了 。

2. startService 和 bindService 的区别,生命周期以及使用场景

  • 区别与生命周期
    • startService:启动后,Service 生命周期为 onCreate(首次创建)→onStartCommand(每次启动调用)→onDestroy(停止时) 。启动方和 Service 是“启动 - 被启动”关系,启动方退出不影响 Service 继续运行(除非自身 stop )。
    • bindService:通过 bindService 绑定,Service 先 onCreate(未创建时),然后 onBind 返回 IBinder 给绑定方,之后处于绑定状态;解除绑定时,若没有其他绑定,执行 onUnbindonDestroy 。绑定方和 Service 是“绑定 - 被绑定”关联,绑定方销毁(如 Activity finish ),若没解除绑定,会触发解绑流程 。
  • 使用场景
    • startService:适合 Service 执行独立后台任务,如音乐播放(只需启动播放,无需频繁交互控制 ,当然也可结合其他方式)、文件下载(启动后后台持续下载 )。
    • bindService:用于需要和 Service 频繁交互场景,比如音乐播放时,Activity 要获取播放状态、控制暂停/播放等,通过绑定获取 Service 提供的接口(IBinder 关联的方法)来交互 。

3. HandlerThread 的使用场景和用法

  • 使用场景:需要在后台线程执行循环任务、消息处理,且希望有类似 Handler - Looper 消息循环机制的场景 。比如串口数据监听(不断从串口读数据,用 HandlerThread 处理读数据、解析、发消息给主线程更新 UI 等流程 );或者定时轮询服务器接口(在后台线程循环执行网络请求 )。
  • 用法
// 创建 HandlerThread
HandlerThread handlerThread = new HandlerThread("MyHandlerThread"); 
handlerThread.start(); 
// 获取 HandlerThread 的 Looper 创建 Handler
Handler handler = new Handler(handlerThread.getLooper()) {@Overridepublic void handleMessage
http://www.dtcms.com/a/326940.html

相关文章:

  • 【昇腾】关于Atlas 200I A2加速模块macro0配置3路PCIE+1路SATA在hboot2中的一个bug_20250812
  • 【Android】【bug】Json解析错误Expected BEGIN_OBJECT but was STRING...
  • 计算机视觉(8)-纯视觉方案实现端到端轨迹规划(模型训练+代码)
  • 虚拟机一站式部署Claude Code 可视化UI界面
  • 401 Unauthorized(未授权)​​ 和 ​​403 Forbidden(禁止访问)区别
  • python --- 基础语法(1)
  • 《飞算Java AI:从安装到需求转实战项目详细教学》
  • 论文阅读:Agricultural machinery automatic navigation technology
  • Linux文件I/O操作全解析
  • 论文阅读(九)Locality-Aware Zero-Shot Human-Object Interaction Detection
  • window 右键菜单添加 vscode
  • PySpark性能优化与多语言选型讨论
  • 【论文阅读】从表面肌电信号中提取神经信息用于上肢假肢控制:新兴途径与挑战
  • 基于跨平台的svg组件编写一个svg编辑器
  • 【论文阅读】一种基于经典机器学习的肌电下肢意图检测方法,用于人机交互系统
  • Spark Core 3.3.2 略讲~
  • Elasticsearch JavaScript 客户端「基础配置」全指南(Node/TS)
  • 人工智能+虚拟仿真,助推医学检查技术理论与实践结合
  • 运维的一些指令
  • LINUX812 shell脚本:if else,for 判断素数,创建用户
  • 使用Excel制作甘特图
  • GitLab CI + Docker 自动构建前端项目并部署 — 完整流程文档
  • Web 开发 14
  • Linux环境gitlab多种部署方式及具体使用
  • 自建知识库,向量数据库 体系建设(二)之BERT 与.NET 8
  • Mac如何安装telnet命令
  • GIT使用攻略
  • 全面解析MySQL(5)——“索引、事务、JDBC”三大核心
  • WPF开发利器:MahApps.Metro 现代化UI框架
  • leetcode3258:统计满足K约束的子字符串数量Ⅰ(变长滑动窗口详解)