kotlin android开发

由于公司业务发展需要,c++转型搞android开发。学习路线如下:

1 kotlin语法,Androidstudio教程

2 Android系统,linux内核,ART虚拟机(android5.0以后默认,dalvik已弃用),多进程,线程,协程,四大组件,内存分配与回收

3 新建demo project,动手写例子,关注编译报错并解决

px,sp和dp

px :像素,一张图片最小的点,不是自然界的长度单位

dp:基于屏幕物理密度的抽象单位

密度(dpi):每英寸包含的像素个数(单位是dpi)

px = dp * (dpi / 160)

sp:可伸缩像素的意思,采用和dp同样的设计理念,解决了文字大小设配的问题

inline,noline,crossline

inline内联,调用处类似代码替换

noline,不内联,例如

private inline fun myMethod(former: () -> Unit, noinline latter: () -> Unit)

crossline,避免非局部返回

fun main() {
   println("start execution:")
   sayHello {
       println("in lambda")
       return        //main返回返回,end execution不打印了
   }
   println("end execution")
}
 
private inline fun sayHello(block: () -> Unit) {   //此处应加crossinline
   println("in sayHello")
   block()
}
 

前台Service与WorkManager

Intent-序列化-Bundle

Intent传递的数据类型有限,除一般的数据类型外,例如对象,队列都是无法传输的。所以需要序列化,3种方式

Serializable接口(代码短效率低):用法  intent.putExtra,intent.getSerializableExtra

Parcelable接口(代码多效率高):用法 writeString,writeInt,intent.getParcelableExtra

Bundle类:用法 intent.getBundleExtra

object关键字

对象声明(Object Declaration),单例模式

伴生对象(Companion Object),静态变量

对象表达式(Object Expression),匿名内部类

协程五种创建方式:(须添加依赖)

build.gradle的dependencies中添加 compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.5'

  • GlobalScope.launch{}    顶层线程执行
  • launch:Job                     异步执行,阻塞协程不阻塞线程,返回job类型对象
  • runBlocking                    协程会阻塞线程执行,待协程执行完毕才继续执行线程
  • coroutineScope:Job             
  • async/await:Deferred     成对使用,异步执行,返回deferred对象

public interface Deferred<out T> : Job        //继承关系

协程调度器CoroutineDispatcher

Dispatcher.Default

默认调度器。它使用JVM的共享线程池,该调度器的最大并发度是CPU的核心数,默认为2

Dispatcher.Unconfined

非受限调度器,它不会将操作限制在任何线程上执行——在发起协程的线程上执行第一个挂起点之前的操作,在挂起点恢复后由对应的挂起函数决定接下来在哪个线程上执行。

Dispathcer.IO

IO调度器,他将阻塞的IO任务分流到一个共享的线程池中,使得不阻塞当前线程。该线程池大小为环境变量kotlinx.coroutines.io.parallelism的值,默认是64或核心数的较大者。

该调度器和Dispatchers.Default共享线程,因此使用withContext(Dispatchers.IO)创建新的协程不一定会导致线程的切换。

Dispathcer.Main

该调度器限制所有执行都在UI主线程,它是专门用于UI的,并且会随着平台的不同而不同

对于JS或Native,其效果等同于Dispatchers.Default
 

Kotlin协程的异常有两种

因协程取消,协程内部suspend方法抛出的CancellationException
常规异常,这类异常,有两种异常传播机制
launch:将异常自动向父协程抛出,将会导致父协程退出
async: 将异常暴露给用户(通过捕获deffer.await()抛出的异常)

Jetpack组件库

build流程

java代码块 4种

1.普通代码块:就是类中方法的方法体 
  public void xxx(){ 
      //code 
  } 
2.构造块:用{}裹起来的代码片段,构造块在创建对象时会被调用,每次创建对象 时都会被调用,并且优先于类构造函数执行。 构造块中定义的变量是局部变量。
  { 
     //code 
  } 
3.静态块:用static{}裹起来的代码片段,只会被执行一次(第一次加载此类时执行,比如说用Class.forName("")加载类时就会执行 static  block),静态块优先于构造块执行。 
  static{  
     //code 
  } 
4.同步代码块:使用synchronized(obj){}裹起来的代码块,在多线程环境下,对共享数据进行读写操作是需要互斥进行的,否则 会导致数据的不一致性。常见的是synchronized用来修饰方法,其语义是任何线程进入synchronized需要先取得对象锁 如果被占用了,则阻塞,实现了互斥访问共享资源。而synchronized也是有代价的。 一个常见的场景是,一个冗长的方法中,其实只有一小段代码需要访问共享资源,这时使用同步块,就只将这小段代码 裹在synchronized  block,既能够实现同步访问,也能够减少同步引入的开销。 同步代码块须写在方法中。
    synchronized(obj){ 
        //code 

    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值