笔记 | 青训营笔记

105 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第3天

registerForActivityResult的学习

registerForActivityResult(ActivityResultContract, ActivityResultCallback)这个方法要求我们传递ActivityResultContractActivityResultCallback两个参数,同时会返回给我们一个ActivityResultLauncher对象,我们可以使用这个对象去进行Activity跳转。

1、常见用法:

FirstActivity

val register = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
    result -> if(result.resultCode == RESULT_OK) {
        val id = result.data?.getStringExtra("data_return")
        Log.d("FirstActivity", "returned data is $id")
    }
}

button1.setOnClickListener {
    val intent = Intent(this,SecondActivity::class.java)
    register.launch(intent)
}

SecondActivity

button2.setOnClickListener {
    val intent = Intent()
    intent.putExtra("data_return","Hello FirstActivity")
    setResult(RESULT_OK,intent)
    finish()
}

网络请求的框架

  • HttpURLConnection

    • 特点:需要自己做封装,例如线程池管理、返回的数据解析
    • 使用场景:只有少量网络请求的工具类App
  • Volley

    • 特点
      1. 适合网络请求频繁,传输数据量小
      2. 不适合用来上传文件和下载
      3. 已停更
    • 使用场景:之前使用volley,且无需大文件下载的App
  • OkHttp

    • 特点
      1. 可以设置拦截器,支持大文件上传和下载
      2. OkHttp 基于NIO和Okio,性能更好
      3. -般需要二次封装使用
    • 使用场景:一般比较少直接使用,可搭配Volley或Retrofit
  • Retrofit

    • 特点:具备OkHttp所有的优点,且更出色
      1. restful api设计风格
      2. 通过注解配置请求,包括请求方法、请求参数、请求头、返回值等。
      3. 可以搭配多种Converter将获得的数据解析,支持Gson、jackson、Protobur等
    • 使用场景:团队内有研发人员对Retrofit比较熟悉时可用

数据存储方式

  • SharedPreferences

    • 特点
      1. 只能存boolean、int、float、long、String 5种简单类型
      2. 键值对存储
    • 使用场景:记录app的各种配置信息,例如用户自己切换的开关、服务端下发的某个配置等
  • 文件存储

    • 特点
      1. 可以存各种格式的文件到手机中
      2. 默认情况下文件不能跨app共享
    • 使用场景
      1. 网络下载的zip包
      2. txt文件的存储
  • ContentProvider

    • 特点
      1. 可跨App进行数据共享
      2. 通过Uri对下进行访问
    • 使用场景:音频、视频、图片、通信录的读写
  • SQLite存储数据

    • 特点:具备OkHttp所有的优点,且更出色
      1. 可存储结构化数据
      2. 对数据进行增删改查较为方便
    • 使用场景:保存feed流数据,并进行增删改查