Service以及多线程初步

简介: Android里面更新UI必须在主线程中更新,子线程中不能更新UI,kotlin有其简化的开启线程方法

一、多线程

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位置

这类特性估计应用比较窄吧,比较难以理解

目录
相关文章
|
Android开发
Service和线程的区别
Service和线程都没有UI界面,都是运行于后台的服务程序,google为什么要为Android系统创建Service这个组件呢? 今天我就把自己的理解分享给大家
174 0
|
2天前
|
Java
多线程线程同步
多线程的锁有几种方式
|
9天前
|
调度 Python
|
11天前
|
安全 算法 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(下)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
51 6
|
11天前
|
存储 安全 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(中)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
53 5
|
11天前
|
存储 安全 Java
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)(上)
17 Java多线程(线程创建+线程状态+线程安全+死锁+线程池+Lock接口+线程安全集合)
46 3
|
2天前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
7 0
|
26天前
|
算法 Java 编译器
多线程线程安全问题之系统层面的锁优化有哪些常见的策略
多线程线程安全问题之系统层面的锁优化有哪些常见的策略