一个多星期都在研究播放器,从双线程到三线程,它们的关系太复杂了,总是搞不定,而且本人c++水平实在有限,很多东西都不太会用。终于搞好了一个能拿得出手的东东,基本没啥严重的bug了,或者我没发现严重的bug,不过代码还是挺乱的,而且音视频对齐使用的办法也不是很好,以后再慢慢优化,先拿来用一个线程读取AVPacket保存到数组,由另外两个线程做解码和播放,这样就不会出现上一篇博文里一个文件两个线程都去
在现代的Android开发中,Kotlin已经成为了越来越受欢迎的编程语言。对于开发者而言,开启Kotlin的支持不仅能提高开发效率,还能提升代码的可读性和可维护性。本文将详细记录Android项目中如何有效地开启Kotlin支持的过程,包括背景定位、演进历程、架构设计、性能攻坚、故障复盘和扩展应用。 ## 背景定位 ### 业务场景分析 随着人们对移动应用的需求不断增长,Android应用的
原创 5月前
18阅读
Kotlin中,一切都是对象,和Java相比,不存在java中原始基本类型等。这种特点使我们操作更加容易:可以使用统一的方式来处理所有的可用的类型。—-基本类型—— 像Integer,float或者boolean等基本数据类型仍然存在,但全都作为对象存在。基本类型及操作方式与Java极为相似的,我们要考虑到的区别有://数字类型不会自动转型。不能给Double变量分配一个Int。必须要做明确的类
转载 2023-12-28 06:38:47
58阅读
上期我们学了函数的一些高级用法和字符串的基础操作,还记得什么是函数的函数吗?我们说匿名函数就是lambda表达式,然后我们将lambda函数当成一个参数传给kotlin的参数,那么就是一个函数的函数,就像是C语言里面的函数指针,然后是字符串的length,replace替换操作,其实就是我们手动替换了一些字符,增加阅读难度。那么这一期我们接着聊函数,不过今天我要带来的可不是一般的函数,他们都是匿名
# Android Kotlin开启服务 ## 介绍 在Android开发中,服务(Service)是一种在后台执行长时间运行操作的组件。它不提供用户界面,但可以在后台处理耗时任务、播放音乐、下载文件等。本文将指导你如何在Android Kotlin开启服务。 ## 流程图 ```mermaid flowchart TD A[创建Service类] --> B[在AndroidMan
原创 2023-11-15 04:39:05
144阅读
MVPMVP和MVCDagger讲完了,下面进入我们的另一大正题MVP:MVC模式无论是做web开发还是安卓应该都比较熟悉,毕竟刚开始的时候大家都是用这种开发架构的。刚开始用MVC(M-Model-模型、V-View-视图、C-Controller-控制器)的时候,就感觉一个Activity或者Fragment中要写很多行代码,所有的数据和View都需要在一个文件中写,感觉特别臃肿,后来真正开发的
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packet Delivery Service) 无连接交付抽象地表示大多数分组交换网络都能提供的一种服务。简单地讲,指的是TCP/IP灰暗网按照报文上携带的地址信息把短报文从一台机器传递到另一台机制。因为无连
转载 1月前
365阅读
传统的阻塞式方案通常在有新的链接时使用其他线程进行处理,每个线程负责处理一个socket,如ServerSocket serverSocket = new ServerSocket(3000); while(true){ Socket socket = serverSocket.accept(); new T
转载 2023-08-20 16:52:18
177阅读
kotlin的协程包括基础设施部分和在基础设施上封装的库。主要看下自己如何使用基础设施部分以及它的原理。首先看下我们如何使用的。1.创建协程。fun <T> launch(block : suspend () -> T){ val continuation = block.createCoroutine(object : Continuation<T> {
上一篇文章介绍了什么是协程,以及协程的作用,优点等,还没了解过的同学,可以去看我上一篇关于协程的文章,链接放在下面这篇文章我们来讲协程的使用,简单的使用,毕竟协程是一个很强大的设计模式,深入了解需要花很多的时间,我们先从简单开始,其实学会了简单的使用,基本已经可以满足我们平时的开发需要了,话不多说,开始。在开始前,要先贯彻一句话,就是上一篇文章讲到的协程的核心,归纳为一句话就是:协程异步就是将耗时
转载 2023-10-25 22:12:31
108阅读
0.背景哈哈,犯懒了,好久没写Kotlin的笔记了,最近听说Kotlin成了Android开发的官方语言了,我也凑个热闹。在上一篇KotlinAndroid(一)——开发环境搭建中已经详细讲述了Kotlin环境的搭建,及插件使用。但是在项目中还是远远不够的,接下来我会根据项目的实际开发对功能进行讲解,并从中总结kotlin的知识点。1.Activity创建我们这次做的是启动页,启动页肯定是用跳转
转载 2024-07-23 12:46:39
45阅读
首先,你要有一个Android Studio。我正在用的是2.2.3版本 其次,安装一个Kotlin的插件。依次打开:Android Studio > Preferences > Plugins,然后选择『Browse repositories』,在搜索框中搜索Kotlin,结果列表中的『Kotlin』插件,就是我们要找的目标了。 点击安装,安装完成之后,重启Android Stu
转载 2023-06-13 23:39:10
645阅读
前言 在 Android 开发中,异步编程是一项必不可少的技能。为了简化异步操作,Kotlin 引入了协程(Coroutines)的概念。协程是一种轻量级的线程,可以帮助开发者更方便地处理异步任务,避免了回调地狱的问题,提高了代码的可读性和可维护性。一、添加依赖首先,确保在你的 Kotlin 项目中添加了协程的依赖:implementation 'org.jetbrains.kotlinx:kot
案例一:火车站买票思路:1.首先要有一个买票的类BuyTicket多线程要实现Runnable接口,重写run()里面是买票,2.买票就需要有票,定义一个票的变量 private int ticketNums = 10;3.写一个买票的方法buy():首先你得判断是否有票,if(ticketNums<=0),就停止return;4.否则就买票,直接ticketNums--就可以了。谁+拿到+
转载 2023-12-06 22:29:33
75阅读
高阶函数将函数作为参数或返回一个函数,称为高阶函数。如“lock()”函数,给对象和函数提供锁功能,获取锁,执行函数,释放锁。fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { return body() } finally { lock.unloc
转载 2024-07-12 12:57:59
73阅读
协程如何使用协程? 1.启动协程的方式 - launch 启动一个协程,返回一个Job,可用来取消协程 - async 启动一个带返回结果的协程Deferred,通过Deferred.await()获取结果; 有异常并不会直接抛出,只会在调用 await 的时候抛出 - public interface Deferred : Job {} - withContext 启动一个协程,传入Cor
转载 2024-06-13 19:24:09
325阅读
Android开发中,使用Kotlin开启一个线程是一个常见的任务,然而在实现过程中若不注意会产生一些意想不到的问题。本篇文章将详细记录这些问题的背景、表现、根因、解决方案及验证过程,确保在使用Kotlin进行多线程工作时的高效与稳定。 ## 问题背景 在一个新闻推送应用中,为了提高用户体验,应用需要在后台处理数据,并及时更新UI。这一需求促使我们使用Kotlin开启后台线程接受推送事件。
原创 6月前
56阅读
目录协变和逆变协变( OUT )不是所有类都可以变成协变的逆变 ( IN )协变和逆变总结reified关键字扩展函数定义一个扩展函数原理扩展函数需要的注意点扩展函数使用场景可空类型扩展泛型扩展函数标准函数与泛型扩展函数扩展属性函数式编程map函数filter函数集合判断式 all , any , count , findgroupByflatMap 和 flatten: 处理嵌套集合中的元素fl
文章目录一、前言二、线程与协程的区别线程需要大量的资源。不可预测的行为竞态条件三、协程GlobalScope.launchrunBlocking 简述async()何时将函数标记为 suspend四、线程的切换五、参考链接 一、前言 在kotlin中协程用法是比较广泛的,协程也是比较复杂的,本文只对其做个简单的记录,后面再进行详细描述二、线程与协程的区别 由于有些耗时操作需要等待,因此常常放在子
转载 2023-11-24 08:35:25
209阅读
开篇前言kotlin的协程在初学者看来是一个很神奇的东西,居然能做到用同步的代码块实现异步的调用,其实深入了解你会发现kotlin协程本质上是通过函数式编程的风格对Java线程池的一种封装,这样会带来很多好处,首先是函数式+响应式编程风格避免了回调地狱,这也可以说是实现promise,future等语言(比如js)的进一步演进。其次是能够避免开发者的失误导致的线程切换过多的性能损失。那么我们就来看
转载 2023-08-21 20:25:20
160阅读
  • 1
  • 2
  • 3
  • 4
  • 5