"内部类持有了外部类的引用,也就是Hanlder持有了Activity的引用,从而导致无法被回收呗。"
kotlin中取消了xxxActivity.this的用法,所以我们可以在activity下新建一个Context属性——instance指向它本身。然后在其他地方使用。如果使用的地方是在activity这一级则可以直接使用this指向它本身
闭包本身定义比较抽象,MDN官方上解释是:A closure is the combination of a function and the lexical environment within which that function was declared。中文解释是:闭包是一个函数和该函数被定义时的词法环境的组合。
在 Android 中 , 使用 Kotlin 开发 , 为 BottomNavigationView 设置 OnNavigationItemSelectedListener 监听接口 ;
任务Runnable定义了一个可以独立运行的代码片段,通常用于界面控件的延迟处理,比如有时为了避免同时占用某种资源造成冲突,有时则是为了反复间隔刷新界面从而产生动画效果。运行一个任务也有多种形式,既可在UI线程中调用处理器对象的post或者postDelayed方法,也能另外开启分线程来执行Runnable对象。那么在运行任务之前,必须事先声明该任务的对象,然后才能由调用者执行该任务。Kotlin代码声明Runnable对象有四种方式,分别对应不同的业务场景,接下来就依次阐述Runnable对象的四种声明方式:
基础设施层 : 基础设施层 的 协程基础 Api 定义在 kotlin.coroutines.* 包下 ;
ambda即lambda表达式,简称lambda。本质上是可以传递给其它函数的一小段代码。有了lambda,可以轻松地把通用代码结构抽取成库函数。lambda最常见的用途是和集合一起配合。kotlin甚至还拥有带接收者的lambda,这是一种特殊的lambda。
最近在学kotlin,这是本人看菜鸟教程后所做的笔记,很多会内容和菜鸟教程重复,仅供参考
内存泄漏,一个说大不大说下不小的瑕疵。作为开发者,我们都很清楚内存泄漏是我们代码问题导致的。但是话说回来,泄漏后果会很严重嘛?这不好说,如果我们不泄漏Bitmap这种大内存的对象,那么修补内存泄漏就像鸡肋一样,“食之无味,弃之可惜”。 就比如说我们项目组,近2000w的DAU,只要不明显影响用户体验,一切以上需求为主…
转眼间使用 Kotlin 已经有两个月了,时间不长,我也算搭上了 Google 宣布 Kotlin 作为官方支持语言的一波末班车。可能大家早已从纯 Java 开发 Android 转为了混合使用开发甚至是 Kotlin 开发,那你转向 Kotlin 的初衷又是什么呢?
类的构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套类)、对象声明五部分组成
文章目录 一、尾随 Lambda - Trailing Lambda 语法 二、Kotlin 中使用 Lambda 表达式替代对象表达式原理 1、Lambda 替换对象表达式 2、原理分析 3、示
在上一期的文章中,我们介绍了自定义类加载器做法的整个流程,还没有理解同学可以点击回看哈!《第18次文章:JVM中的类加载机制》。在日常生活中,我们有时候需要将一个类文件进行加密处理,然后再传送给用户。此时,我们在设计自定义类加载器的时候,就需要考虑加密类文件的解密处理了。下面,我们来简单的介绍一种加密解密文件系统的类加载器。此处我们的重心在于介绍加解密文件系统,所以我们使用一种简单的异或操作当做加密算法,简单的介绍一下整个流程。
之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下:
在前面的章节中,我们学习了Kotlin的语言基础知识、类型系统等相关的知识。在本章节以及下一章中,我们将一起来学习Kotlin对面向对象编程以及函数式编程的支持。
kotlin 中时没有static 这种方法修饰的静态方法 所以要实现 类似于java中的静态属性就要用到伴生对象 例子:
在介绍Lambda表达式之前,我们先来看只有单个方法的Interface(通常我们称之为回调接口):
使用sealed修饰符修饰。其实是一组类的集合。可以用来表示受限的类的继承结构。 其也可以有子类,所有子类也必须在相同的文件中声明。 密封类从某种意义上说,它们是枚举类的扩展:枚举类型的值集也受到限制,但每个枚举常量仅作为单个实例存在,而密封类的子类可以包含多个实例并包含状态。这样又具备了枚举不具备的灵活性。
众所周知,在 Java 方法内将局部变量作为参数传递到方法后,如果该参数是基本数据类型,那内部的赋值修改不会同步到外部,如果是引用数据类型,对于对象的赋值也是不会同步到外部的,但是对于对象的属性修改是会同步的,这是因为 Java 是值传递,修改的是副本,但是副本指向的属性地址是相同的。
7 协程 协程,协作代码段。关于定义这里不多讲了,协程提供了一种可以避免线程阻塞的能力,这是他的核心功能。在 kotlin 中使用协程,需要在gradle中引入协程库: //Android 工程使用 implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:x.x.x" //Java 工程使用 implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:x.x.x'
在Kotlin中,我可以声明普通类、数据类、静态类,它也有抽象类和接口,其中abstract关键字只能作用在普通类。
这里是专栏 重学 Kotlin,灵感来自于 Medium 上 Android Developers 团队的 Kotlin Vocabulary 。
官网:http://kotlinlang.org/docs/reference/ github:https://github.com/JetBrains/kotlin
Spring Boot提供了许多实用程序和注释来帮助您测试应用程序。测试支持由两个模块提供:spring-boot-test 包含核心
今天咱说说 Kotlin 的 implicit receiver。这是一个我们写 Kotlin 经常会用的东西,虽然你可能都没听过这个词,但你一定用过它。Kotlin 的很多高级功能,都利用到了这个概念——比如协程,协程是重度依赖它的,非常重。所以,弄明白它是个什么、怎么用、怎么去发挥它最大的价值,对我们的能力提升是非常有帮助的。
例如,在平时的开发过程中,把一个列表转换成另一个列表或map等等这样的转换操作是一种常见需求。
上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类。除了与Java共有的抽象类,Kotlin还新增了好几种特殊类,这些特殊类分别适应不同的使用场景,极大地方便了开发者的编码工作,下面就来看看Kotlin究竟提供了哪些独门秘笈。
介绍:在Kotlin中类可以包含:构造函数和初始化代码块,函数,属性,内部类,对象声明. 使用的关键字和java是一样的使用class进行声明
C#中的内部类能够使用外部类定义的类型和静态方法,但是不能直接使用外部类的实例方法,直接看来,外部类对于内部类的作用更像是一个命名空间,在C#中,始终可以用(只要访问控制允许) Sys.Model.Key key = new Model.Key(); 来创建一个内部类的实例,这个实例与外部类的任何实例没有任何直接的关系。类似于Java中的静态内部类。 在C#中,类区分为Nested Class和Not-Nested Class,前者是声明在其他数据类型内部的类。后
Kotlin的对象表达式与Java中的匿名内部类的主要区别:匿名内部类只能指定一个父类型,但对象表达式可以指定0~N个肤类型。
Android的应用被限制为最多占用16m的内存,至少在T-Mobile G1上是这样的(当然现在已经有几百兆的内存可以用了——译者注)。它包括电话本身占用的和开发者可以使用的两部分。即使你没有占用全部内存的打算,你也应该尽量少的使用内存,以免别的应用在运行的时候关闭你的应用。Android能在内存中保持的应用越多,用户在切换应用的时候就越快。作为我的一项工作,我仔细研究了Android应用的内存泄露问题,大多数情况下它们是由同一个错误引起的,那就是对一个上下文(Context)保持了长时间的引用。
在Kotlin中,定义方法很有趣,不仅仅因为方法的关键字是fun(function前几个字符),还是因为你会惊奇的发现,它允许我们在方法中定义方法。如下
Kotlin是由开发过IntelliJ IDEA、Android Studio、PyCharm等IDE的著名IDE厂商JetBrains公司设计并开源的编程语言。2011年7月推出的Kotlin项目深受《Effective Java》的影响,直到2016年2月15日第一个官方稳定版本Kotlin v1.0才正式发布,2017年Google I/O开发者大会中,Google宣布Kotlin成为Android开发的一级语言,Kotlin “转正”。
Kotlin 作为后起之秀,站在巨人们的肩膀上是她得天独厚的优势,而这个巨人也包括—《Effective Java》(EJ),得益于这个巨人,Kotlin 到处散发着高效的味道,这篇文章让我们一起来领略下 Kotlin 的高效之道。
面向对象程序设计(简称OOP)是当今主流的程序设计范型,它已经取代了20世纪70年代的“结构化”过程化程序设计开发技术。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。
通过对Android基本组件的学习,也有接触少部分Android的事件处理,比如按钮的点击事件、选框的状态切换事件。 一、Android事件处理 Android提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理。 基于监听的事件处理:主要做法就是为Android界面组件绑定特定的事件监听器,前面小节已经见到大量这种事件处理的示例。 基于回调的事件处理:主要做法就是重写Android组件特定的回调方法, 或者重写Activity的回调方法。Android为绝大部分界面组件都提供了
博客:https://www.jianshu.com/u/0438038fe17e
并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了。这是危及到线程安全的,因为其他线程有可能通过这个逸出的引用访问到“初始化了一半”的对象(partially-constructed object)。这样就会出现某些线程中看到该对象的状态是没初始化完的状态,而在另外一些线程看到的却是已经初始化完的状态,这种不一致性是不确定的,程序也会因此而产生一些无法预知的并发错误。在说明并发编程中如何避免this引用逸出之前,我们先看看一个对象是如何产生this引用逸出的。
Kotlin 君和 Swift 君在一个团队一起开发已经很久了,由于平台的差异性,他们经常会进行一些技术上的交流(PK),《Kotlin vs. Swift漫谈》系列就是他们在互相切磋是的语录。内容会
在开发过程中,由于习惯的原因,我们可能对某种编程语言的一些特性习以为常,特别是只用一种语言作为日常开发的情况。
匿名函数 就是 Lambda 表达式 , 同时也是 闭包 , 三者的是相同的概念 ;
Java Lambda 表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。实际上 Lambda 表达式并不仅仅是匿名内部类的语法糖,JVM 内部是通过 invokedynamic 指令来实现 Lambda 表达式的。具体原理放到下一篇。本篇我们首先感受一下使用 Lambda 表达式带来的便利之处。
Java Lambda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的。具体原理放到下一篇。本篇我们首先感受一下使用Lambda表达式带来的便利之处。
本章内容包括: 类和接口 非默认属性和构造方法 数据类 类委托 使用 object 关键字 1、定义类继承结构 /*--------------- 4.1.1 kotlin 中的接口-------------*/ // 代码清单 1 声明一个简单的接口 // interface Clickable { // fun click() // } // 代码清单 2 实现一个简单的接口 cla
这是一份写给Android工程师的协程指南,希望在平静的2023,给大家带来一些本质或者别样的理解。
话说,我最近写了一个小 Demo,之前开发调试一直都是在一台 6.0.1 的手机上,顺风顺水的。
作者 Richard Warburton, Raoul Urma, Mario Fusco 译者 段建华
哪些语句能放在如下代码中所示位置,而不会导致编译错误? public class ThisUse{ int plane; static int car ; public void d
领取专属 10元无门槛券
手把手带您无忧上云