一、多线程
1.线程
Android里面更新UI必须在主线程中更新,子线程中不能更新UI,kotlin有其简化的开启线程方法
thread{
//具体耗时操作
}
2.异步处理机制
1.Message
//在线程中充当信息传递的角色
2.Handler
//处理各种信息和发送信息
3.MessageQueue
//字面意思就是消息队列,先进先出
4.Looper
//将消息一条条取出来,每个线程中只会有一个looper对象
3.利用AsyncTask轻松处理异步处理
//通过重写AsyncTask来完成异步处理
1.onPreExecute()
//初始化界面的操作可以放进来
2.doInBackground()
//此方法默认在子线程中运行
3.onProgressUpdate()
//对于UI进行操作
4.onPostExecute()
//任务执行完毕时执行
二、Service基本用法
非常适合处理一些比较耗时的操作,比如下载、播放音乐等等,不需要用户进行多少的交互,在程序进入后台之后进行操作
onCreate()
//在首次创建service时调用
onStartCommand()
//每次启动service时都会调用
onDestroy()
//service销毁时调用
onBind()
//绑定活动的方法
三、Service的生命周期
service只要启动或者被绑定都会处于运行状态,故需要停止service和解绑service这样service才会被销毁
四、前台Service的使用
由于android系统近些年对于后台的严格控制,所以需要使用前台service才能比较稳妥的保证service一直处于运行状态,
前台service有点像通知,不过我们需要进行权限声明
<users-permission android:name = "android.permission.FOREGROUND_SERVICE"/>
五、Kotlin:泛型的高级特性
1.泛型实化
使得我们可以在运行期间也清楚泛型的具体类型,具体实现是kotlin的内联函数
举个栗子
inline fun < reified T> getGenericType() = T::class.java
//需要加上inline与reified关键字
2.泛型的协变和逆变
首先这部分可能由于用处比较小,可以以后用到了再学,以下只给出概念
//首先做一个约定
fun hhh(p:T):T{
//做为参数的部分称为in,返回值部分称为out
}
//协变
A是B的子类,如果类似List<T>这种泛型,要想List<A>也是List<B>的子类
必须保证泛型T不能出现再in位置,只能出现在out位置
//逆变
跟协变有点反过来的样子
A是B的子类,如果类似List<T>这种泛型,要想List<B>也是List<A>的子类
必须保证泛型T不能出现再out位置,只能出现在in位置
这类特性估计应用比较窄吧,比较难以理解