TheFuckingLife

指南

2019-12-04  本文已影响0人  我想做个程序员

Activity

Service

Broadcast

ContentProvider

Fragment

View

View绘制

View事件分发

自定义View

View滑动

控件

RecyclerView

ListView

ViewPager

动画

Bitmap && Drawable

Android线程与进程

Handler/Looper

Binder

序列化

进程保活

AsyncTask

HandlerThread

IntentService

IPC

线程池

Android优化

ANR

1. ANR是什么?如何避免和解决ANR?

ANR:Application Not Responding,即应用无响应。一般有以下三种:

造成Timeout的原因一般有两种:

操作阻塞的原因可能是:

问题定位:

解决方法:

内存泄漏memory leak

1. 内存泄漏的原因、场景、解决方法?

根本原因:长生命周期的对象持有短生命周期的对象,导致短生命周期对象就无法及时释放。

泄漏场景:

检测方法:

OOM (out of memory)

冷启动&&热启动

性能优化

UI优化

其它

Context

1. 谈谈你对Android中Context的理解?

Context:包含上下文信息的一个参数。Android 中的 Context 分三种:

它描述的是一个应用程序环境的信息, 通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作, 例如: 启动一个 Activity, 发送广播, 接受 Intent 信息等。

Application

权限

Android中的强、弱、软、虚应用

LruCache && DiskLruCache

第三方库

OkHttp

Glide

1. 说说View的绘制流程

  1. Measure过程:View的绘制其实就是一个深度遍历的过程。这里有一个MeasureSpec的概念,每一个View都有一个MeasureSpec,它由父View根据自己的MeasureSpec和子View的LayoutParam共同决定。MeasureSpec有三个取值:
    1. MeasureSpec. UNSPECIFIED:不限制View大小
    2. MeasureSpec.EXACTLY:
    3. MeasureSpec.AT_MOST:
  2. Layout过程:
  3. Draw过程:
    1. Draw the background
    2. If necessary, save the canvas' layers to prepare for fading
    3. Draw view's content
    4. Draw children
    5. If necessary, draw the fading edges and restore layers
    6. Draw decorations (scrollbars for instance)

2. 说说Activity的启动模式

启动模式涉及到一个Task的概念,Task说的是为了完成一个任务的一系列的Activity的集合,这些Activity可以是来自不同的应用的。比如一个应用需要写一封邮件,它用Intent去打开了邮件这个应用的写邮件的MailActivity,这个Activity就可以和其它Activity同属一个Task。

启动模式有四种:

  1. standard
  2. singleTask
  3. singleTop
  4. singleInstance

标记位有三个:

  1. FLAG_ACTIVITY_NEW_TASK:
  2. FLAG_ACTIVITY_SINGLE_TOP:
  3. FLAG_ACTIVITY_CLEAR_TOP:

标记位优先级>启动模式

3. 说说Activity的生命周期

  1. onCreate-->onStart()-->onResume()-->onPause()-->onStop()-->onDestrory()
    -->onRestart()
  2. 正常关闭情况下onSaveInstanceState() 以及 onRestoreInstanceState()这两个方法是不会被调用的。它们只会在Activity不正常关闭下调用。我们说的视图恢复就是指的不正常关闭时候,Activity再次打开的时候要让用户感觉到Activity并没有被关闭。
  3. 建议onStop()中保存数据

4. 说说View事件分发

手指在屏幕的动作被抽象成了MotionEvent对象,根据不同情境分成了MotionEvent.ACTION_DOWN、MotionEvent.ACTION_POINTER_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP、MotionEvent.ACTON_CANCLE。事件分发主要就是当ACTION_DOWN以及ACTION_POINTER_DOWN两个事件到来时寻找新的TouchTarget的过程。主要有三个大的方法参与这个过程:

  1. dispatchTouchEvent()
  2. onInterceptTouchEvent() (ViewGroup独有)
  3. onTouchEvent()

其中dispatchTouchEvent负责寻找到一个新的TouchTarget,,并把事件交给TouchTarget。onInterceptTouchEvent()指示当前ViewGroup是否拦截此次事件。onTouchEvent()处理事件,它的返回代表当前事件是否被这个View消耗。

onTouch()--> onTouchEvent()-->onClick()

5. 内存泄漏

上一篇下一篇

猜你喜欢

热点阅读