- 博客(183)
- 资源 (26)
- 收藏
- 关注

原创 kotlin标准函数let, run, apply, with, also
kotlin标准函数特点对比标准函数名称作用域中的接收者返回值letit作用域的最后一行的对象runthis作用域的最后一行的对象withthis作用域的最后一行的对象applythis调用对象本身alsoit调用对象本身let与also从上表可以看出,let与also作用域中的接收者都是it,但它们比较明显的不同在于返回值的不同。let返回值是作用域的最后一行的对象,而also返回值是调用对象本身。他们都可以在调用时对调用者进行空
2021-06-01 15:06:49
207

原创 Kotlin协程之withContext
withContext必须在协程或者suspend函数中调用,否则会报错。它必须显示指定代码块所运行的线程,它会阻塞当前上下文线程,有返回值,会返回代码块的最后一行的值。1. 指定代码块所运行的线程它和launch一样,通过Dispatchers来指定代码块所运行的线程,如下所示:runBlocking<Unit> { withContext(Dispatchers.IO){ delay(1000) println("${Thread.currentThread(
2021-05-27 14:49:55
7713
4

原创 Kotlin协程之launch
协程之launch协程需要依赖以下包dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'}launchlaunch必须放在协程里才行,launch开启的协程不会阻塞所在线程,如下:import kotlinx.coroutines.*fun main() { GlobalScope.launch { // 在后台启动一个新的协程并继续 printl
2021-05-27 13:41:51
6064
1

原创 【Dagger2】一文让你从Dagger2入门到熟练
@Inject注解在属性中表示该属性需要依赖注入,注解的属性不能使用private修饰,只能用默认、protected或public注解在方法中表示该方法需要依赖注入,注解的方法不能是抽象方法,不能是private修饰的注解在构造方法中表示此类能为Dagger2提供依赖关系,如果有多个构造函数,只能注解一个,否则会报错...
2020-04-26 19:34:49
375

原创 【性能】Android内存管理理论篇
注:本文主要来自于谷歌官网1 内存管理概览Android Runtime(ART)和Dalvik虚拟机使用的是分页和内存映射来管理内存。这意味着应用修改的任何内存,无论修改的方式是分配新对象还是轻触内存映射的页面,都会一直驻留在RAM,并且无法换出。要从应用中释放内存,只能释放应用保留的对象引用,使内存可供垃圾回收器回收。这种情况有一个除外:对于任何未经修改的内存映射文件(如代码),如果系统...
2020-04-16 19:16:54
432

原创 【性能】Java对象生命周期
Java对象生命周期对象的生命周期大致可以分为7个阶段:创建阶段(Created)应用阶段(Using)不可视阶段(Invisible)不可达阶段(Unreachable)可收集阶段(Collected)终结阶段(Finalized)对象空间重新分配(Deallocated)创建阶段(Created)在对象创建阶段,一般要经历以下几个步骤才能完成对象的创建过程:为对象分...
2020-04-14 17:21:49
544

原创 【性能】OOM原理解析:LowMemoryKiller原理
1 概述Android的设计理念之一,便是应用程序退出,但进程还会继续存在系统以便再次启动时提高响应时间. 这样的设计会带来一个问题, 每个进程都有自己独立的内存地址空间,随着应用打开数量的增多,系统已使用的内存越来越大,就很有可能导致系统内存不足, 那么需要一个能管理所有进程,根据一定策略来释放进程的策略,这便有了lmk,全称为LowMemoryKiller(低内存杀手),lmkd来决定什么时...
2020-04-14 10:53:11
1577

原创 【IPC】Android中的进程间通信(IPC)详解
1 需要的知识点1.1 进程与线程要理解跨进程通信,首先需要理解以下几个知识点1:进程:按照操作系统的描述,进程是资源分配的最小单位,一个进程可以包含多个线程线程:线程是CPU调度的最小单位,多线程需要考虑并发问题。1.2 Android中的多进程Android多进程指的是一个应用中存在多个进程的情况,在Android中,一般一个应用存在一个进程。多进程的情况2:某个应用由于自...
2020-04-13 18:33:05
818

原创 【IPC】Binder跨进程通信机制原理
注:本文查阅网上众多博客,然后总结得出,参阅博客地址见章末附录1 Binder简介1.1 定义定义如图所示(图片来自网上):2 知识储备2.1 进程空间一个进程空间被分为用户空间和内核空间。内核空间是系统内核运行的空间;用户空间是用户程序运行的空间。不同进程间的用户空间数据不可共享,不同进程间的内核空间数据是共享的;同一进程内,用户空间和内核空间都可被系统调用。示意图如下所示:2...
2020-04-13 11:26:16
369
1

原创 【蓝牙】BluetoothAdapter详解
BluetoothAdapter简介BluetoothAdapter代表本地蓝牙设备适配器。BluetoothAdapter可以让我们执行基本的蓝牙任务,如发现蓝牙,查询蓝牙已配对列表,通过已知的MAC地址初始化一个BluetoothDevice实例,并且创建一个BluetoothServerSocket来监听其它设备的请求,启动蓝牙低功耗设备扫描等。要获取代表本地蓝牙适配器Bluetoot...
2020-04-10 19:08:09
7307

原创 【面试】Android面试题集锦
持续更新…Handler谈谈消息机制Handler作用 ?有哪些要素 ?流程是怎样的 ?一个线程能否创建多个Handler,Handler跟Looper之间的对应关系 ?Handler 引起的内存泄露原因以及最佳解决方案软引用跟弱引用的区别为什么系统不建议在子线程访问UI?Looper死循环为什么不会导致应用卡死?使用Handler的postDealy后消息队列会有什么变化?可...
2020-04-09 15:42:40
492

原创 MultiImageView+PhotoView+ViewPager图片预览
效果截图PhotoViewPhotoView是一个github上的一个开源项目。将下面加入到根build.gradle文件中allprojects { repositories { maven { url "https://jitpack.io" } }}然后,加入库到你的模块build.gradledependencies { imp...
2020-04-09 11:39:31
482
1

原创 Android短信相关(理论部分)
1 PDU编码协议1.1 PDU编码规则目前,发送短信消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式。使用Text模式收发短信代码简单,实现起来容易,但最大的缺点是不能收发中文短信;而PDU模式不仅支持中文短信,也能发送英文短信。PDU模式收发短信可以使用3种编码:7-bit、8-bit和UCS2编码。7-bit编码用于发送普通的ASCII字符,8bit编码...
2020-02-14 11:41:44
1018

原创 Android经典蓝牙相关知识
1 蓝牙基础知识1.1 蓝牙相关的权限<!--想要用蓝牙进行通信则要申明bluetooth权限--><uses-permission android:name="android.permission.BLUETOOTH"/><!--bluetooth_admin用来操作蓝牙,官方建议除非是用户请求修改蓝牙设置的--><uses-permissio...
2020-02-12 17:42:57
10797
1

原创 【性能】垃圾收集器(GC)
目录1 概述2 判断对象是否存活2.1 引用计数法2.2 可达性分析3 垃圾收集算法3.1 标记-清除算法3.2 复制算法3.3 标记-整理算法3.4 分代收集算法1 概述在Java内存运行时的各个部分中,程序计数器,虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因...
2019-06-21 15:03:04
341

原创 Android消息机制源码解析
Android消息机制1.消息机制简述1.1 注意事项2. 准备阶段2.1 prepare2.2 loop3 发送消息3.1 Handler3.2 ThreadLocal4 获取消息4.1 MessageQueue总结参考文献:1.消息机制简述准备阶段在子线程中调用Looper.prepare()方法或者在主线程调用Looper.prepareMainLooper()方法创建当前的Lo...
2019-06-03 16:16:22
252

原创 好文推荐(持续更新)
1、Android屏幕适配全攻略(最权威的官方适配指导) 2、Android开发——IPC机制之Bundle实现IPCBundle实现源码3、详解实现Android中实现View滑动的几种方式4、Android学习总结(七)———— 本地广播5、Android高新面试题2017汇总(带答案) 6、Android RecyclerView 使用完全解析 体验艺术般的控件7、这是一篇Android Re
2017-09-22 22:40:15
443
原创 has been compiled by a more recent version of the Java Runtime (class file version 61.0), this vers
解决方案:勾选与jdk版本对应的Android SDK Command-line Tools,如下图所示。再次在cmd中输入命令。
2024-01-16 19:07:08
1559
原创 Value ‘xxx’ given for org.gradle.java.home Gradle property is invalid (Java home supplied is invalid
flutter环境报错
2023-12-27 12:30:56
2322
原创 flutter版本选择
使用命令dart --version查看dart版本使用命令flutter doctor查看flutter版本Flutter 有 3 个发布渠道,分别是 stable、beta 和 master。我们推荐使用 stable 渠道除非你需要体验最新更新的 Flutter 特性。要查看你当前使用的哪个渠道,使用下面的命令:先去Flutter github查看一下你想回退版本提交记找到需要回退的版本找到需要的回退版本的commit编号终端进入Flutter的git目录,执行:git r
2023-10-27 15:26:38
1795
原创 java.lang.ClassCastException: TintContextWrapper cannot be cast to Activity
TintContextWrapper继承自ContextWrapper,调用wrap包装会将context传递到ContextWrapper的mBase中。所以将View的context强制转换为Activity就会报错。
2023-04-04 20:49:39
300
转载 【Flutter】Flutter inspector 工具使用详解,查看Flutter布局,widget树,调试界面等
Flutter inspector工具使用详解,查看Flutter布局,widget树,调试界面,界面尺寸查看
2022-07-29 10:43:15
4896
原创 【Flutter】混合开发之Flutter预加载解决第一次加载页面缓慢问题
Native和Flutter混合开发,通过加载Flutter页面,但Flutter页面第一次加载时非常缓慢,可以通过Flutter预加载的方式来减少第一次加载的耗时。
2022-07-27 17:50:21
5947
原创 RenderFlex children have non-zero flex but incoming height constraints are unbounded.
RenderFlex children have non-zero flex but incoming height constraints are unbounded.
2022-07-21 17:49:20
3037
1
原创 【Flutter】FlutterWeb与Js交互
Flutterweb与android原生进行交互,需要用到js作为中转(flutter知识有限,目前只知道需要js作为中转),所以需要js调用flutter,flutter调用js。js定义的方法Js调用FlutterFlutter中的代码Js调用该方法组合使用上述两个组合,可以做到Flutter调用Js的方法,然后Js回调Flutter的方法。.........
2022-06-29 15:19:42
1995
MVPDemo.zip
2019-07-04
PhotoView android开源框架jar包
2018-10-22
Android缓存——将数据以对象的方式缓存到本地
2018-07-23
IPCBundle实现源码
2017-09-23
AIDL示例(Android Interface Definition Language)
2017-09-16
AIDL简单的示例代码
2017-08-18
AIDL简单使用示例代码
2017-08-18
Android中notification通知的Demo——震动,铃声,Led灯闪烁
2017-01-13
Android——Listview不用notifydatasetchanged更新数据的方法
2017-01-11
ExpandableListAdapter
2016-03-11
ExpandableListView简单示例
2016-03-11
自定义DrawView
2016-03-03
Animation——制作动画引导页
2016-01-17
动态加载布局——只改变一个页面的部分布局的方法
2016-01-14
百度地图系列03——简单地图定位
2015-11-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人