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

【KO】大厂常见问题

以下是对这些 Android 常见问题的解答:

1. Android 的数据存储方式

  • SharedPreferences:轻量级键值对存储,常用于保存配置信息,如用户设置 。以 XML 文件形式存储在/data/data/<包名>/shared_prefs目录下。
  • 文件存储:分为内部存储(应用私有,如/data/data/<包名>/files ,无需权限,应用卸载时删除 )和外部存储(公共存储,需申请权限,如保存图片、文件等,Environment.getExternalStorageDirectory() 对应路径 )。
  • SQLite 数据库:轻量级嵌入式关系型数据库,Android 提供 SQLiteOpenHelper 辅助创建和管理数据库,可存储结构化数据,如用户信息表等。
  • ContentProvider:跨应用数据共享机制,可暴露自身数据给其他应用访问,也能访问系统内置(如联系人、短信)或其他应用通过 ContentProvider 共享的数据,基于Binder 实现进程间通信。
  • 网络存储:将数据存储在服务器端,通过网络请求(如 HttpURLConnection、OkHttp 等)上传、下载数据,像云存储服务。

2. Service 的生命周期

  • 启动式 ServicestartService() 启动 ):生命周期方法依次为 onCreate()(首次创建时调用,初始化资源 )→ onStartCommand()(每次通过 startService() 调用时触发,处理业务逻辑 )→ onDestroy()(Service 销毁时调用,释放资源 )。启动后会在后台独立运行,除非调用 stopService() 或自身调用 stopSelf()
  • 绑定式 ServicebindService() 启动 ):生命周期方法为 onCreate()onBind()(返回 IBinder 供绑定者通信,需实现 )→ 绑定者与 Service 建立关联,当所有绑定者调用 unbindService() 后,执行 onUnbind()onDestroy()

3. Service 的 onStartCommand 有几种返回值

  • START_STICKY:若 Service 因内存不足被系统杀死,当系统资源恢复后,会尝试重新创建 Service,且不会重新传递最后一个 Intent,适合执行周期性任务,如定时拉取数据 。
  • START_NOT_STICKY:Service 被杀死后,系统不会自动重启,除非有新的 startService() 调用,适用于执行一次性任务,比如发送一条即时消息 。
  • START_REDELIVER_INTENT:Service 被杀死后,系统会重新创建 Service 并重新传递最后一个 Intent,保证 Intent 被处理,像文件上传任务,需确保任务执行完成,可使用该返回值 。
  • START_STICKY_COMPATIBILITYSTART_STICKY 的兼容版本,行为类似但稍显不一致,一般优先用 START_STICKY

4. Handler 防止内存泄露

  • 静态内部类 + 弱引用:将 Handler 定义为静态内部类,避免因非静态内部类隐式持有外部类(如 Activity)引用,导致 Activity 销毁后无法释放。同时,在 Handler 中通过弱引用持有外部类对象,使用时判空,示例:
static class MyHandler extends Handler {private WeakReference<Activity> activityWeakReference;public MyHandler(Activity activity) {activityWeakReference = new WeakReference<>(activity);}@Overridepublic void handleMessage
http://www.dtcms.com/a/326995.html

相关文章:

  • 局域网远程控制/推流
  • 从裸机到云原生:Linux 操作系统实战进阶的“四维跃迁”
  • 嵌入式调试利器:STM32F429移植letter-shell实战
  • 【第四章:大模型(LLM)】05.LLM实战: 实现GPT2-(7)模型训练与微调
  • Apache 服务器基础配置与虚拟主机部署
  • 【自动化备份全网服务器数据项目】
  • 前端,route路由
  • 计算机视觉(7)-纯视觉方案实现端到端轨迹规划(思路梳理)
  • Rsync自动化备份平台建设实战
  • C#对接Ollama,调用大模型禁用思考模式
  • 鸿蒙本地与云端数据双向同步实战:从原理到可运行 Demo 的全流程指南
  • HarmonyOS元服务开发系列教程(三):实现音乐播放和封面旋转
  • 智能家居Agent:物联网设备的统一控制与管理
  • Python函数篇:从零到精通
  • 间隙锁(Gap Lock)
  • 【YOLOV8】小目标困难场景优化
  • 计算机网络---默认网关(Default Gateway)
  • 通用同步/异步收发器USART串口
  • JavaScript的fetch函数的用法
  • C++11新增关键字和范围for循环
  • 【限时分享:Hadoop+Spark+Vue技术栈电信客服数据分析系统完整实现方案
  • 基于Python的《红楼梦》文本分析与机器学习应用
  • Uniapp物联网平台登录与温湿度监测系统
  • 【电子硬件】EMI中无源晶振的优势
  • 从原理到实践:一文掌握Kafka的消息生产与消费
  • Web前端小游戏轮盘。
  • 开发避坑指南(23):Tomcat高版本URL特殊字符限制问题解决方案(RFC 7230 RFC 3986)
  • Python Day28 HTML 与 CSS 核心知识点 及例题分析
  • @Rancher简介部署使用 - Docker Compose
  • 第五章 特征值与特征向量