自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ling的专栏

勿忘初心,方得始终

  • 博客(36)
  • 资源 (3)
  • 收藏
  • 关注

原创 Service 详解(一) --- 简介

什么是服务Service 是一个可以在后台执行长时间运行操作而不提供用户界面的应用组件。 服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行。服务的两种形式:启动服务当应用组

2017-11-03 11:12:11 534

原创 Kotlin 其他(九) --- 异常(Exceptions)

1、异常类Kotlin 中所有异常类都是 Throwable 类的子孙类。 每个异常都有消息、堆栈回溯信息和可选的原因。使用 throw-表达式 来抛出异常:throw MyException("Hi There!")使用 try-表达式 来捕获异常:try { // 一些代码}catch (e: SomeException) { // 处理程序}finally {

2017-10-26 17:39:30 390 1

原创 Kotlin 其他(八) --- 空安全(Null Safety)

空安全可空类型与非空类型Kotlin 的类型系统旨在消除来自代码空引用的危险,也称为《十亿美元的错误》。许多编程语言(包括 Java)中最常见的陷阱之一是访问空引用的成员,导致空引用异常。在 Java 中, 这等同于 NullPointerException 或简称 NPE。Kotlin 的类型系统旨在从我们的代码中消除 NullPointerException。NPE 的唯一可能

2017-10-26 17:38:41 327

原创 Kotlin 其他(七) --- 操作符重载(Operator overloading)

1、操作符重载Kotlin 允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示 (如 + 或 *)和固定的优先级。为实现这样的操作符,我们为相应的类型(即二元操作符左侧的类型和一元操作符的参数类型)提供了一个固定名字的 成员函数或扩展函数。 重载操作符的函数需要用 operator 修饰符标记。另外,我们描述为不同操作符规范操作符重载的约定。2、一 元操作2.1 一

2017-10-26 17:37:42 335

原创 Kotlin 其他(六) --- 相等性(Equality)

1、相等性Kotlin 中有两种类型的相等性:引用相等(两个引用指向同一对象);结构相等(用 equals() 检查)。2、引用相等引用相等由 ===(以及其否定形式 !==)操作判断。a === b 当且仅当 a 和 b 指向同一个对象时求值为 true。3、结构相等结构相等由 ==(以及其否定形式 !=)操作判断。按照惯例,像 a == b 这样的表达式会翻译成:a?.equals(b)

2017-10-26 17:36:42 469

原创 Kotlin 其他(五) --- This 表达式

This 表达式为了表示当前的 接收者 我们使用 this 表达式:在类的成员中,this 指的是该类的当前对象。 在扩展函数或者带接收者的函数字面值中, this 表示在点左侧传递的 接收者 参数。 如果 this 没有限定符,它指的是最内层的包含它的作用域。要引用其他作用域中的 this,请使用 标签限定符:限定的 this要访问来自外部作用域的this(一个类 或者扩展函

2017-10-26 17:35:41 339

原创 Kotlin 其他(四) --- 类型的检查与转换“is”与“as”

is 与 !is 操作符我们可以在运行时通过使用 is 操作符或其否定形式 !is 来检查对象是否符合给定类型:if (obj is String) { print(obj.length) }if (obj !is String) { // 与 !(obj is String) 相同 print(“Not a String”) } else { pr

2017-10-26 17:34:24 10022

原创 Kotlin 其他(三) --- 区间(Ranges)

区间区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。 区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:if (i in 1..10) { // 等同于 1 println(i) } 整型区间(IntRange、 LongRange、 CharRange)有一个额外的特性:它们可以迭代。 编

2017-10-26 17:33:34 553

原创 Kotlin 其他(二) --- 集合(Collections)

集合:List、Set、Map与大多数语言不同,Kotlin 区分可变集合和不可变集合(lists、sets、maps 等)。精确控制什么时候集合可编辑有助于消除 bug 和设计良好的 API。预先了解一个可变集合的只读 视图 和一个真正的不可变集合之间的区别是很重要的。它们都容易创建,但类型系统不能表达它们的差别,所以由你来跟踪(是否相关)。Kotlin 的 List 类型是一个提供

2017-10-26 17:31:43 362

原创 Kotlin 其他(一) --- 解构声明(Destructuring Declarations)

1、解构声明有时把一个对象 解构 成很多变量会很方便,例如:val (name, age) = person这种语法称为 解构声明 。 一个解构声明同时创建多个变量。 我们已经声明了两个新变量:name 和 age,并且可以独立使用它们:println(name)println(age)一个解构声明会被编译成以下代码:val name = person.compon

2017-10-26 17:19:43 286

原创 Kotlin 函数与Lambdas(四)--- 协程

1、协程在 Kotlin 1.1 中协程是实验性的。详见下文一些 API 启动长时间运行的操作(例如网络 IO、文件 IO、CPU 或 GPU 密集型任务等),并要求调用者阻塞直到它们完成。协程提供了一种避免阻塞线程并用更廉价、更可控的操作替代线程阻塞的方法:协程挂起。协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包

2017-10-26 17:06:29 353

原创 Kotlin函数与Lambdas(三)--- 内联函数

1、内联函数使用高阶函数会带来一些运行时的效率损失:每一个函数都是一个对象,并且会捕获一个闭包。 即那些在函数体内会访问到的变量。 内存分配(对于函数对象和类)和虚拟调用会引入运行时间开销。但是在许多情况下通过内联化 lambda 表达式可以消除这类的开销。 下述函数是这种情况的很好的例子。即 lock() 函数可以很容易地在调用处内联。 考虑下面的情况:lock(l) { foo() }编译器没有

2017-10-26 16:55:27 208

原创 Kotlin函数与Lambdas(二)--- 高阶函数和 lambda 表达式

1、高阶函数高阶函数是将函数用作参数或返回值的函数。 这种函数的一个很好的例子是 lock(),它接受一个锁对象和一个函数,获取锁,运行函数并释放锁:fun <T> lock(lock: Lock, body: () -> T): T { lock.lock() try { return body() } finally { lock.

2017-10-26 16:11:09 227

原创 Kotlin函数与Lambdas(一)--- 函数

1、函数声明Kotlin 中的函数使用 fun 关键字声明:fun double(x: Int): Int { return 2*x}2、函数用法调用函数使用传统的方法:val result = double(2)调用 成员函数 使用 点 表示法:Sample().foo() // 创建类 Sample 实例并调用 foo2.1 参数函数参数使用 Pascal 表示法定义,即 name:

2017-10-26 15:47:53 1150

原创 Kotlin类和对象 (十三)--- 委托属性(Delegated Properties)

1 、委托属性有一些常见的属性,虽然我们可以在每次需要的时候手动实现它们, 但是如果能够为大家把他们只实现一次并放入一个库会更好。例如包括:延迟属性(lazy properties): 其值只在首次访问时计算;可观察属性(observable properties): 监听器会收到有关此属性变更的通知;把多个属性储存在一个映射(map)中,而不是每个存在单独的字段中。为了涵盖这些(以及其他)

2017-10-26 15:45:21 359

原创 Kotlin类和对象 (十二)--- 委托(Delegation)

类委托委托模式 已经证明是 实现继承的一个很好的替代方式, 而 Kotlin 可以零样板代码地原生支持它。 类 Derived 可以继承一个接口 Base,并将其所有 共有的方法委托给一个指定的对象:interface Base { fun print()}class BaseImpl(val x: Int) : Base { override fun print() { prin

2017-10-26 15:16:24 241

原创 Kotlin类和对象 (十一)--- 对象(Object)

对象表达式和对象声明有时候,我们需要创建一个对某个类做了轻微改动的类的对象,而不用为之显式声明新的子类。 Java 用匿名内部类 处理这种情况。 Kotlin 用对象表达式和对象声明对这个概念稍微概括了下。对象表达式要创建一个继承自某个(或某些)类型的匿名类的对象,我们会这么写:window.addMouseListener(object : MouseAdapter() { overrid

2017-10-26 15:03:04 442

原创 Kotlin类和对象 (十)--- 枚举类

枚举类的最基本的用法是实现类型安全的枚举:enum class Direction { NORTH, SOUTH, WEST, EAST}每个枚举常量都是一个对象。枚举常量用逗号分隔。初始化因为每一个枚举都是枚举类的实例,所以他们可以是这样初始化过的:enum class Color(val rgb: Int) { RED(0xFF0000), GREEN(

2017-10-26 14:52:21 243

原创 Kotlin类和对象 (九)--- 嵌套类与内部类

类可以嵌套在其它类中:class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 }}val demo = Outer.Nested().foo() // == 2内部类一个类可以标记为 inner 以能够访问外部类的成员。内部类携带了一个对外部类的对象的引用:class Outer

2017-10-26 14:35:35 201

原创 Kotlin类和对象 (八)--- 泛型(Generics)

与 Java 类似,Kotlin 中的类也可以有类型参数:class Box<T>(t: T) { var value = t}一般来说,要创建这样类的实例,我们需要提供类型参数:val box: Box<Int> = Box<Int>(1)但是,但是如果类型参数可以推断出来,例如从构造函数的参数或者从其他途径,允许省略类型参数:val box = Box(1) // 1 具有类型 Int

2017-10-26 11:16:07 225

原创 Kotlin类和对象 (七)--- 密封类(sealed class)

1、前言当一个值在受限的集合中有一个类型而不能有其它类型时,密封类用来表示受限制的类继承结构。在某种意义上,它们是枚举类的扩展:枚举类型的值集合也是受限的,但是每个枚举常量只存在一个实例,而密封类的子类可以有多个实例且可以保存状态。声明一个密封类 ,需要在类名前面添加 sealed 关键字。 密封类可以有多个子类,但是所有的子类的声明必须同密封类在同一个文件内。(在Kotlin1.1 前,该规则更

2017-10-26 10:38:41 462

原创 Kotlin类和对象 (六)--- 数据类 (data class)

1、数据类的定义我们常常创建一些类,其主要目的是保存数据。在这样的类中,一些标准的功能性和实用性函数自动从数据中生成。在Kotlin中,这样的类被称为数据类,并被标记为数据。例如data class User(val name: String,val age: Int)编译器会从主构造函数中的所有参数自动生成以下成员:equals()/hashCode() 对toString() "User(n

2017-10-25 17:40:19 950

原创 Kotlin类和对象 (五)--- 扩展

1、什么是扩展类似于C#和 Gosu,Kotlin 提供了向一个类扩展新功能的能力, 而不必继承这类, 也不必使用像装饰者模式的任何设计模式。 这种功能是通过一种特殊的声明来实现的, Kotlin 中称为 扩展(extension). Kotlin 支持 扩展函数(extension function) 和 扩展属性(extension property)。2、扩展函数要声明一个扩展函数, 我们

2017-10-25 14:03:05 322 1

原创 Kotlin类和对象 (四)--- 可见性修饰符

1、可见性修饰符Kotlin中,有四种可见性修饰符:private, protected, internal and public 默认的可见性修饰是 public 类/对象/接口/构造函数/方法/属性和setter都有可见性修饰符(getter与属性可见性相同) 2、包 中方法/属性/类/对象/接口 可在顶级声明,即直接在包中声明:// file name: example.ktpackag

2017-10-25 11:11:37 366

原创 Kotlin类和对象 (三)--- 属性和字段

1、回顾下属性和字段的区别java 中的属性(property),通常可以理解为get和set方法; 而字段(field)通常叫做“类成员”或者“类成员变量”,有时也叫“域”,可以理解为“数据成员”,用来承载数据的。这两个概念是完全不同的。1.1 字段(field)类成员(字段),通常在类中定义的类成员变量,例如:public class A{ private String s = "12"

2017-10-24 15:51:25 1325

原创 Kotlin类和对象 (二)--- 接口

1、接口的定义Kotlin 的接口很像 java 8。它们都可以包含抽象方法,以及方法的实现。和抽象类不同的是,接口不能保存状态。可以有属性但必须是抽象的,或者提供访问器的实现。接口使用 关键字 interface 来定义:interface MyInterface { fun bar() fun foo() { //函数体是可选的 }}2、接口的实现一个类

2017-10-24 15:49:07 207

原创 Kotlin类和对象 (一)--- 类和继承

1、类1.1、声明类在 Kotlin 中类用 class 声明:class Invoice {}类的声明包含 类名、 类头(指定类型参数,主构造函数等等)和类主体,用大括号包裹。类头和类体是可选的;如果没有类体可以省略大括号。class Empty1.2、构造函数在 Kotlin 中类可以有一个主构造函数以及一个或多个二级构造函数。 主构造函数是类头的一部分:跟在类名后面(可以有可选的类型参数)

2017-10-24 14:33:22 284

原创 Kotlin基础(二)--- 控制流(if,when, for, while)

1、 If 表达式在Kotlin中,if是一个表达式,它返回一个值。跟java不同,它没有三元操作符(condition ? then : else)。// 常规的使用var max = a if (a < b) max = b// 带 else 的用法var max: Intif (a > b) { max = a} else { max = b}// 作为表达式va

2017-10-24 11:10:34 288

原创 Kotlin基础(一)--- 基本类型

基本类型在Kotlin中,一切皆为对象。也就是说,我们可以在任何变量上调用成员函数和属性。一些类型可以具有特殊的内部表示,例如:数字、字符和布尔值可以做在运行时被表示为原始值,但是对于用户来说,它们看起来像普通类。在本节,我们将描述Kotlin中使用的基本类型:数字,字符,布尔,数组和字符串。1、 数字类型Kotlin处理数字和Java很接近,但是并不完全相同.例如, 对于numbers没有隐式扩大

2017-10-20 14:17:46 441

原创 Kotlin 基础学习

一、Kotlin 简介Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。 Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。 在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。为什么

2017-10-17 14:13:03 351

原创 数据存储之SQLite -- 如何查看数据库文件(基于AS开发工具)

第一步: 打开DDMS 窗口的方式第二步:查看data文件夹数据库文件目录: /data/data/包名/databases/数据库名第一步打开窗口后,会发现在DDMS下File Explorer无法查看data文件夹。如何解决呢? 需要在adb shell 中授权 “chmod 777 /data”。这里需要注意下,如果运行的是真机,手机需要先Root(这里我运行的是模拟器),否则无法使用命令查看

2017-10-16 10:11:36 10931

原创 Android 历史版本号

版本号 版本Code 代号 发布时间 Android 7.1.1 25 Nougat(牛轧糖) 2016/12/06 Android 7.

2017-03-14 11:12:06 420

原创 TextView控件之部分文本内容设置前景、背景色等

ForegroundColorSpan 设置前景色BackgroundColorSpan 设置背景色ClickSpan 点击效果实现添加下划线StrikethroughSpan 设置删除线String content = "花儿是红色的,树叶是绿色的。";SpannableStringBuilder builder = new SpannableStringBuilder(content);/

2017-03-13 19:03:48 738

原创 TextView控件之 跑马灯效果

一、设置属性实现 <?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http

2017-03-13 17:01:44 232

原创 AS 版本升级后工程构建慢的解决方案

AS 版本升级后工程构建慢的解决方案AS版本升级可能会伴随着 Gradle插件以及SDK版本的升级,如果没有设置好,项目构建的过程会很慢或者构建失败。解决方案如下 (以升级到2.3为例):2.3版本需要的配置:Gradle版本要求 3.3及以上Build Tools 25.0.0 及以上Android Studio 升级按照提示下载完成后重启,重启后可能会发现一直在“gradle

2017-03-13 15:51:28 879

原创 Android Eclipse 里添加对类库添加源码

一、如何查看Android 源码1、打开Android SDK Manager ,下载对应版本的源代码,下载完成后我们会在sdk安装目录下 sources 文件中看到下载的源文件夹 2、查看某个类,在代码中,按着Ctrl键,然后用鼠标点击要查看源代码的类 3、点击“attach source”,添加到工程中就行了二、如何查看 Android Private Libraries // 仅以v4

2015-03-19 11:17:29 960

信息系统项目管理师课程第3版

信息系统项目管理师课程第3版 电子版,考试指定版教程

2018-12-24

universal-image-loader-1.8.6-javadoc

universal-image-loader-1.8.6-javadoc 源码说明

2013-11-28

android多线程断点下载

Android 多线程断点续传

2013-11-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除