/**
* 每天一个知识点day72 TODO sleep()和wait()的区别、IntentService
*
* sleep()和wait()的区别
* 1.sleep是线程方法,wait是Object方法
* 2.sleep不会释放锁,wait会释放锁,并且加入等待队列。
* 3.sleep方法不需要依赖于synchronized,wait方法需要依赖于synchronized。
* 4.sleep不需要被唤醒,在休眠之后会退出阻塞,wait需要被唤醒。
*
* 重写和重载的区别?
* 定义上的区别:
* 重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。
* 调用的时候根据函数的参数来区别不同的函数。
* 对权限没有要求,可以有不同的访问修饰符,可以抛出不同的异常。
* 发生在一个类中。
*
* 覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。
* 即函数名和参数都一样,只是函数的实现体不一样。
* 重写的方法修饰符大于等于父类的方法。
* 重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常
* 发生在继承中。
*
* 抽象类和接口的区别?
* 1.抽象类abstract关键字修饰
* 2.必须使用public。protected修饰的话必须是内部类,默认缺省public,
* 如果是private,则子类无法继承,也就无法实现其抽象方法,
* 3.不能被实例化。
* 4.如果一个子类继承抽象类,那么必须实现其所有的抽象方法。
* 如果有未实现的抽象方法,那么必须定义为 abstract
* 抽象类中可以有非抽象的方法
*
* 1.接口中的变量隐式的使用 public static final 修饰,并且需要给出初始值。
* 方法隐式的使用 public abstract 修饰(并且只能是 public ,如果是 private,procted,
* 那么就编译报错)。接口中的方法默认不能有具体的实现(JDK1.8开始可以有默认的实现)
* 2.接口中的变量必须用 public static final 修饰,并且需要给出初始值。
* 所以实现类不能重新定义,也不能改变其值。
* 3.接口中的方法默认是 public abstract,也只能是这个类型。
* 不能是 static,接口中的方法也不允许子类覆写,抽象类中允许有static 的方法
* 4.不能被实例化。
*
*
*
* IntentService
* 继承自Service,内部使用Handler+HandlerThread实现,可以用于处理
* 异步请求,线程任务是按顺序在后台执行的。
*
* 实现:
* 1.定义类继承IntentService,复写onHandleIntent方法。
* 2.在Manifest中注册。
* 3.在activity中开启服务。
*
* 原理:
* 构造函数中需传入name,实际就是HandleThread的name,
* onHandleIntent中可以根据Intent处理不同的任务,
* 内部ServiceHandler继承自Handler,用于消息的处理,在
* 处理完毕消息后会系统会自动关闭服务。
*
* 与Service的区别?
* Service运行在主线程,不能处理耗时操作,否则会出现ANR。
* IntentService是创建了一个工作线程,处理多线程任务。
* Service需要主动调用stopService。
* IntentService不需要,在所有Intent处理完毕后,系统会自动关闭服务。
* IntentService为Service的onBind提供了提供了默认实现,返回null
* 为Service的onStartCommand提供了默认实现,将请求的Intent添加到
* 队列中,
* IntentService是后台线程,线程优先级高。
*
*
*/
网友评论