
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
既然协程挂起可以实现切线程,那肯定就不会阻塞当前的线程了。至于为什么叫非阻塞式挂起,是因为在实现协程代码的时候,是使用了看似阻塞式的书写方式,但是又实现了非阻塞式的效果。main {val user = suspendingRequestUser() // 耗时操作。

Android系统的蓝牙打开过程,涉及到APP应用层、framework框架层和Bluetooth协议栈层,总体的流程图可以参考如下:可以看到,开启的流程大致分为4个阶段:第一阶段: (对应图中绿色虚线流程)应用软件调用BluetoothAdapter的enable()方法,通过Binder远程调用到BluetoothManagerService里面对应的enable方法:@RequiresPer
StorageManager是Android SDK中管理存储设备的一个类。其中的存储设备分内部存储和外部存储,外部存储可以有SDCard、U盘等其他挂载的外设。StorageVolume代表的是一个设备信息的数据结构,里面包含了名称、路径、挂载状态等等信息。以前获取设备列表的方法大多是通过反射获getVolumeList()方法获取到StorageVolume[]数组,但是现在发现完全没有必..
一、概述Ubuntu是Linux系统,它是天生支持多用户操作的,用户空间是在根目录下的home/username里面。可以从Other Locations 进入,可以看到自己的电脑的几个磁盘分区:这个Computer的磁盘,就是系统盘,进入之后:可以看到很多系统文件,其中的home目录里面,就是我们用户账号的空间,这个空间只有当前自己用户或者root用户可以读写。其实桌面左边的一些文件夹,就是ho
LifeCycleOwner在LifeCycle的设计策略中扮演的是生命周期提供者的角色,一个UI组件想要接入到LifeCycle的一系列规则中,就需要实现LifeCycleOwner,比如我们熟知的ComponentActivity就是实现了LifecycleOwner,并且通过。这里就有一个问题,Activity是接入了LifeCycleOwner的,但是Window浮窗是没有接入的,而Liv

作为一个练手项目,基于IjkMediaPlayer的仿照腾讯视频风格的播放器,支持全屏缩放,对其中核心的代码做记录。播放器总体架构如图所示:player是继承frameLayout,自己内部拥有IjkMediaPlayer的实例,以及做渲染显示用的TextureView,同时player只有一个mContainer子控件,mContainer同样也是一个frameLayout容器,容纳Tex...







