【KO】 Android基础

发布于:2025-08-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

以下是对这些 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()) {
   
   
    @Override
    public void handleMessage

网站公告

今日签到

点亮在社区的每一天
去签到