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这个组件呢? 今天我就把自己的理解分享给大家
286 0
|
3月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
188 6
|
6月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
324 83
|
3月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
340 0
|
8月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
299 0
|
4月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
301 16
|
11月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
通过本文,您可以了解如何在业务线程中注册和处理Linux信号。正确处理信号可以提高程序的健壮性和稳定性。希望这些内容能帮助您更好地理解和应用Linux信号处理机制。
216 26
|
11月前
|
Linux
Linux编程: 在业务线程中注册和处理Linux信号
本文详细介绍了如何在Linux中通过在业务线程中注册和处理信号。我们讨论了信号的基本概念,并通过完整的代码示例展示了在业务线程中注册和处理信号的方法。通过正确地使用信号处理机制,可以提高程序的健壮性和响应能力。希望本文能帮助您更好地理解和应用Linux信号处理,提高开发效率和代码质量。
222 17

热门文章

最新文章