Android 多线程.md
Android沿用了Java的线程模型,一个Android应用在创建的时候会开启一个线程,我们叫它主线程或者UI线程。如果我们想要访问网络或者数据库等耗时的操作时,都会开启子线程去处理,从Android 3.0开始,系统要求网络访问必须在子线程中进行,否则会抛出异常;也就是为了避免主线程被耗时操作阻塞从而产生ANR,同时也说明了多线程在Android应用开发占据着十分重要的位置。《Android进阶之光》
进程与线程
进程
一个“进行中”的程序。
系统进行资源分配和调度的基本单位。
线程
CPU调度的最小单元。
与进程相比,线程创建和切换开销更小。
Java线程的状态(6种)
网上5种状态的说法误导的,5种状态是属于早期进程的状态。
下面是JDK源码:src/main/java/java/lang/Thread.java 中 线程状态State枚举 代码:
1234public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED ...
AsyncTask.md
逻辑上是指以多线程的方式处理操作,Android API层面上是指AsyncTask类。
AsyncTask的优点当我们通过线程去执行耗时的任务,并且在操作完之后可能还有更新UI时,通常还会用到Handler来更新UI线程。虽然其实现起来简单,但是如果有多个任务同时执行时则会显得代码臃肿。Android提供了AsyncTask,它使得异步任务实现起来更加简单,代码更简洁。
AsyncTask的使用AsyncTask是一个抽象的泛型类,它有3个泛型参数,分别为Params、Progress和Result,其中Params为参数类型,Progress为后台任务执行进度的类型,Result为返回结果的类型。如果不需要某个参数,可以将其设置为Void类型。AsyncTask中有4个核心方法,如下所示。
onPreExecute():在主线程中执行。一般在任务执行前做准备工作,比如对 UI 做一些标记。
doInBackground(Params…params):在线程池中执行。在 onPreExecute方法执行后运行,用来执行较为耗时的操作。在执行过程中可以调用publishProgres ...
Broadcast.md
广播是什么?定义
广泛运用在应用程序之间传输信息的机制。
发送广播内容是一个 Intent。
广播的使用场景
同一 app 内有多个进程的不同组件之间的消息通信。
不同 app 之间的组件之间消息的通信。
广播的分类无序广播context.sendBroadcast(Intent)方法发送的广播,不可被拦截,当然发送的数据,接收者是不能进行修改的。
有序广播context.sendOrderBroadcast(Intent)方法发送的广播,可被拦截,而且接收者是可以修改其中要发送的数据,修改和添加都是可以的,这就意味着优先接收者对数据修改之后,下一个接收者接受的数据是上一个接收者已经修改了的。
本地广播localBroadcastManager.sendBroadcast(Intent),只在 app 内传播。 本地广播的发送和注册广播接收器都需要使用到 LocalBroadcastManager 类,如下所示为本地广播的发送和本地广播接收器注册的代码:
12345public static void sendLocalBroadcast(Context context,Stri ...
11面试
1.ListView 中图片错位的问题是如何产生的?2.混合开发有了解吗?3.知道哪些混合开发的方式?说出它们的优缺点和各自使用场景?(解答:比如:RN,weex,4.H5,小程序,WPA等。做Android的了解一些前端js等还是很有好处的);5.屏幕适配的处理技巧都有哪些?6.服务器只提供数据接收接口,在多线程或多进程条件下,如何保证数据的有序到达?7.动态布局的理解8.怎么去除重复代码?9.画出Android 的大体架构图10Recycleview和ListView的区别11. ListView图片加载错乱的原理和解决方案ListView item缓存机制:为了使得性能更优,ListView会缓存行item(某行对应的View)。ListView通过adapter的getView函数获得每行的item。滑动过程中1)如果某行item已经滑出屏幕,若该item不在缓存内,则put进缓存,否则更新缓存;2)获取滑入屏幕的行item之前会先判断缓存中是否有可用的item,如果有,做为convertView参数传递给adapter的getView。出现的问题:1)行item图片显示重复, ...