当前位置: 首页 > 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.lryc.cn/news/618361.html

相关文章:

  • damn the jvm again(2)
  • DDIA第五章:无主复制(去中心化复制)详解
  • 华为发布AI推理新技术,降低对HBM内存依赖
  • 阿里云国际DDoS高防:添加网站配置指南
  • LabVIEW菜单操控
  • 【USRP】基于LabVIEW的BPSK、QPSK,文本,图片
  • 区块链技术原理(7)-安全问题
  • C++少儿编程(二十二)—条件结构
  • 云原生作业(nginx)
  • QT(概述、基础函数、界面类、信号和槽)
  • Linux 服务器,安装mqtt服务
  • Linux 系统下 VS Code 降级至 1.85 版本教程:通过历史版本网站解决兼容性问题
  • 从零开始手搓一个GPT大语言模型:从理论到实践的完整指南(一)
  • Linux性能监控
  • Qt Charts 深度解析与实战指南
  • 全面解析MySQL(5)——“索引、事务、JDBC”三大核心
  • AI不再停留在概念阶段,而是在各行业核心业务场景产生实际价值。随着大模型、边缘计算等技术的突破,AI应用将向实时化、自主化、普惠化方向深度演进。
  • 高性能web服务器Tomcat
  • 飞算 JavaAI -智慧城市项目实践:从交通协同到应急响应的全链路技术革新
  • 有趣的 npm 库 · json-server
  • Qt之QMetaEnum的简单使用(含源码和注释)
  • Windows 命令行:打开命令提示符界面
  • 【DL】浅层神经网络
  • 【实时Linux实战系列】实时环境监测系统架构设计
  • Spring Boot 3 数据源连接信息存储方法
  • 蓝牙隐私保护机制:面试高频考点与真题解析
  • 多奥电梯智能化解决方案的深度解读与结构化总结,内容涵盖系统架构、功能模块、应用场景与社会价值四大维度,力求全面展示该方案的技术先进性与应用前景。
  • 线缆桥架、管道设计规范详解
  • C++中template、 implicit 、explicit关键字详解
  • Linux线程——对线程库简单的面向对象封装