Android基础 --- 思维导图 (更新中)

分享记录Android学习回顾过程

基本组件

Activity

View

  • 整体布局

    • AbsoluteLayout

    • ConstraintLayout

      • 设备适配性强
    • LinearLayout

  • 列表显示

    • ListView (过时)

      • 原因:开发者需要对getChildView(), getGroupView()进行性能优化,否则ListView易出现卡顿
    • RecyclerView (推荐)

      • 强制使用ViewHolder管理convertView内所有子组件以获得良好性能
  • 进度条

    • ProgressBar
  • 拖动条

    • SeekBar
    • RatingBar
  • 视图效果

    • ViewAnimator

      • 添加动画效果

        • ViewFilpper

          • 控制组件切换的动画效果
    • ViewSwitcher

      • 切换视图

        • ImageSwitcher
        • TextSwitcher
  • 系统状态栏通知

    • NotificationManager

      • 通过Manager发送Notification
    • Channel (Android 8加入)

      • 统一管理通知
    • Android 9开始,

  1. 在创建MessageStyle时应使用Person为参数,可设置更丰富的信息
  2. Message对象可使用setData()设置更多样的通知数据(如图片)
  • 对话框

    • AlertDialog

      • ProgressDialog
      • DatePickerDialog
      • TimePickerDialog

Service

BroadcastReceiver

ContentProvider

Intent & IntentFilter

Android事件机制

事件处理

  • 基于监听的事件处理

    • 为组件绑定特定的时间监听器(Listener)

      • 应用场景:
        没法基于回调的场景 =.=
      • 监听处理三对象:
  1. Event Source: 组件
  2. Event: 用户操作
  3. Event Listener: 监听事件源发生的事件并做出响应
  • 基于回调的事件处理

    • 覆写组件 / Activity的回调方法

      • 应用场景:
        处理具有通用性的事件
      • 以View为例,其回调方法有:
        onKeyDown(), onKeyLongPress(), onKeyShortCut(), onKeyUp(), onKeyTouchEvent(), onTrackballEvent()

响应系统设置的事件

  • Configuration类

    • 获取系统的配置信息

量大、复杂数据处理

  • Handler消息传递机制

    • 主要作用

      • 在新启动的线程中发送消息
      • 在主线程(UI线程)中获取、处理消息
    • Handler、Loop、MessageQueue

      • Message:
        Handler接受和处理的消息对象

      • Looper:
        每个线程只能拥有一个Looper,loop方法负责读取MessageQueue中的消息,读到消息后把消息发给Handler进行处理

      • MessageQueue:
        消息队列,先进先出管理Message对象,程序创建Looper对象时,会在它的构造器中创建MessageQueue对象

      • Handler:
        发送消息到指定的MessageQueue,即当前线程中必须有一个Looper对象管理MessageQueue

        • 保证线程中有Looper对象:
  1. 在主UI线程中,系统已经初始化了一个Looper对象

  2. 自己启动的子线程,比西创建Looper对象并调用它的prepare()方法, prepare()方法保证每个线程最多只有一个Looper对象

    • Handler使用步骤:
  3. 调用Looper的prepare()方法创建Looper对象

  4. 创建Handler的实例,重写handleMessage()方法,该方法负责处理其他线程的消息

  5. 调用Looper的loop()方法启动Looper

简单数据处理

  • 异步任务 AsyncTask

    • 处理轻量级任务
    • 相较于Handler更加消耗系统资源

Activity与Fragment

Activity

  • Activity启动

    • 通过Intent启动Activity
    • 通过Bundle在Activity之间交换数据
  • Activity回调机制

    • 自由主题

UI线程阻塞超过20s会引发ANR (Application Not Responding)异常

解决思路:

减少UI线程的耗时操作,耗时的放到子线程运行

你可能感兴趣的:(android)