kotlin-学习笔记(一)
什么是kotlin
一门现代多平台应用的静态编程语言
相对于java的优点
总的来说就是语法上比较简洁,更易书写和阅读,对空指针这类的错误异常更易把握,并很好兼容java
基础语法
列出几个较java不同的地方
- 包定义,不要求包名符合文件路径,每个kotlin源文件都会默认引入kotlin一些相关包,然后根据平台的不同,引入一些平台包
- 字符串模板,字符串中可以包含模板表达式,列如:
val s = "abc" val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"
- 空值检查,可以通过?.来安全使用可能为空的对象。列如:
val l = b?.length ?: -1
android-studio-实用技巧
- 打jar包
android studio 默认提供的是aar包,如果要打成jar包的话,就要自己写gradle task,在库工程的build.gradle文件中添加一下代码:
然后在终端执行命令打出jar包task makeJar(type: Copy) { delete 'build/libs/mysdk.jar' from('build/intermediates/bundles/release/') into('build/libs/') include('classes.jar') rename ('classes.jar', 'mysdk.jar') } makeJar.dependsOn(build);
gradlew makeJar
- 引用aar包
将aar拷贝至lib目录,在module中的build.gradle文件中添加以下代码repositories { flatDir { dirs 'libs' } } dependencies { compile(name: 'aar_name', ext: 'aar') }
Android中AIDL的工作原理
在上一篇文章中Android中AIDL的使用详解介绍了AIDL的使用流程,这篇文章我们说说AIDL的工作原理。
IPC
在这之前我们先简单说一下IPC,IPC是Inter-Process Communication的缩写,是进程间通信或者跨进程通信的意思,既然说到进程,大家要区分一下进程和线程,进程一般指的是一个执行单元,它拥有独立的地址空间,也就是一个应用或者一个程序。线程是CPU调度的最小单元,是进程中的一个执行部分或者说是执行体,两者之间是包含与被包含的关系。因为进程间的资源不能共享的,所以每个系统都有自己的IPC机制,Android是基于Linux内核的移动操作系统,但它并没有继承Linux的IPC机制,而是有着自己的一套IPC机制。
更多Android中AIDL的使用详解
为了说的深入浅出一点,我们先从AIDL的作用和使用说起,然后再开始介绍一些概念和工作原理。
AIDL用来做什么
AIDL是Android中IPC(Inter-Process Communication)方式中的一种,AIDL是Android Interface definition language的缩写,对于小白来说,AIDL的作用是让你可以在自己的APP里绑定一个其他APP的service,这样你的APP可以和其他APP交互。
Android中全局异常的捕获
应用的crash是让人很蛋疼的问题,在开发测试的时候还能根据日志输出什么的进行排查修复,但是应用发布以后,用户的随意性访问出现测试时未知的Bug导致我们的程序crash,此时我们是无法直接获取的错误log的,也就无法修复Bug。所以这时候我们就需要一个能全局捕获异常,并且将这个异常信息上传到服务器的功能,以便根据收集到的异常信息,在后期的版本中进行修复,改善用户体验。
更多Android中反射的简单应用
自己对反射的理解和应用还处于比较浅显的阶段,写这篇文章更多在于整理总结,也就是帮助自己进一步的理解和学习反射机制。
反射
反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
java中类反射
反射是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。
简单总结这些定义,那就是反射可以让我们获得一个类的所有信息,包括私有属性和私有方法,对于我们这种小白,先知道这点就可以啦,那在java中如何使用发射呢。这里我们随便创建一个类来演示。比如说创建一个Book类:
public class Book implements Parcelable
{
private int id=1;
private String name="android";
private String author="wf";
private String getName()
{
return name;
}
}
更多Android中退出应用的实现
退出应用是项目开发中很基本的一个需求,这个功能很简单,也有很多实现的方式,这里把自己知道的退出方法做一个整理,跟大家交流分享一下。
更多Android-Studio:使用Gradle构建不同版本的APP(构建变体)
Android Studio(我使用的Studio版本是2.0)中有一个构建变体的功能,默认位于左下角
那这个功能是做什么用的呢,一般来说我们在做项目的时候,可能有这样的需求,一个项目中需要有不同版本,比如说免费版,收费版,周年庆版啦等等,这些版本大部分功能和模块是一样的只是部分不同,以前可能是通过svn或者git上建立分支来进行版本控制,但维护起来很麻烦。所以构建变体这个功能用官方的说法就是你可以在一个项目里面构建不同的版本,对,而且打包的时候可以一次性打包所有版本,是不是超级爽。英语好的同学可以看官方的教程Configure Build Variants。
更多WebView加载速度优化
在做混合应用的时候,有几个痛点,一个是无网络无法使用,还有一个是受网络环境影响的网页加载速度。今天就这两个问题,和大家交流一下自己的经验。
离线缓存
这个比较容易,开启webView的缓存功能就可以了。
WebSettings settings = webView.getSettings();
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDomStorageEnabled(true);//开启DOM缓存,关闭的话H5自身的一些操作是无效的
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
更多Android中的图片裁剪(三)之自定义裁剪工具
在上一篇文章中Android中的图片裁剪(二)之开源项目介绍了一些优秀的图片裁剪开源项目,在我们实现自己的裁剪功能的时候,也可以看下这些开源项目的源码,看看大牛们都是怎么实现的。
更多