【KO】大厂常见问题

发布于:2025-08-13 ⋅ 阅读:(21) ⋅ 点赞:(0)

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

网站公告

今日签到

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