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这个组件呢? 今天我就把自己的理解分享给大家
194 0
|
2月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
58 1
C++ 多线程之初识多线程
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
27 3
|
2月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
23 2
|
2月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
38 2
|
2月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
44 1
|
2月前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
48 1
|
2月前
|
Java
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件成立时被唤醒,从而有效解决数据一致性和同步问题。本文通过对比其他通信机制,展示了 `wait()` 和 `notify()` 的优势,并通过生产者-消费者模型的示例代码,详细说明了其使用方法和重要性。
31 1