线程和线程池 handlerThread
进程:资源分配的最小单位。
线程:最小调度单位。
一个线程只能有一个进程,一个进程可以由无数的线程。
创建线程的3种方式:
1.直接继承Thread类。
2.实现Runnable接口。
进程:资源分配的最小单位。
线程:最小调度单位。
一个线程只能有一个进程,一个进程可以由无数的线程。
创建线程的3种方式:
1.直接继承Thread类。
2.实现Runnable接口。
类是Java.lang.Class类的实例对象
编译时刻加载类,静态加载类,运行时刻加载类是动态加载类。
Class,forName(“类的全称”)
不仅表示了类的类类型,还代表了动态加载类。
1、强引用(StrongReference)
强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:
|
|
当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如果不使用时,要通过如下方式来弱化引用,如下:
|
|
显式地设置o为null,或超出对象的生命周期范围,则gc认为该对象不存在引用,这时就可以回收这个对象。具体什么时候收集这要取决于gc的算法。
什么是ANR
ANR全称Application Not Responding,意思就是程序未响应。如果一个应用无法响应用户的输入,系统就会弹出一个ANR对话框,如下图所示,用户可以自行选择继续等待亦或者是停止当前程序。
|
|
##this 关键字:
this关键字非常有意思,每一个Java类中都会有this关键字。
this关键字的意思也很简单,就是当前类的对象的引用。表示调用方法的那个对象的引用。
Activity是Android最重要的组件,因为它是与用户交互的。所以我们要弄明白Activity的生命周期。
Activity的生命周期有两种情况,第一种是正常情况下的创建,销毁。第二种是Activity被内存回收的情况。
Builder模式就是不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器,得到一个builder对象。然后再builder对象上调用类似setter的方法,来设置每个相关的可选参数。
最后,客户端调用无参数的build方法来生成不可变的对象。
线程在Android中是一个很重要的概念,从用途上来说线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程往往用于执行耗时操作。在操作系统中,线程是操作系统调度的最小单元,同时线程又是一种受限的系统资源,即线程不可能无限制地生产,并且线程的创建和销毁都会有相应的开销。
AsyncTask 是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程中更新UI。但是AsyncTask并不适合进行特别好使的后台任务,对于特别好使的任务开说,建议使用线程池。
Android消息处理机制主要就是消息的传递机制,通过创建消息队列,把消息放入消息队列中,通过Looper获取消息,并通过handler处理消息的过程。
整个过程最重要的就是Looper的工作机制,Looper内部通过调用MessageQueue的next方法来获取消息,得到消息后便通过Handler的dispatchMessage方法
处理消息,dispatchMessage方法内部判断消息是否为空,如果消息不为空,回调方法handleMessage不为空,就会把消息传递到回调方法中,然后用户再来处理这个消息。
整个过程MessageQueue起到存储的作用,Looper就是一个操作者,而handler就是一个用户与数据的中间件。