`Android`分类下的文章

Android

kotlin之Lambda表达式

kotlin之Lambda表达式

Java8中引入,匿名函数。

普通的Lambda表达式类似对应kotlin普通函数的声明,而带接收者的lambda表达式则类似对应kotlin的扩展函数。

lambda的基本语法

{ variable -> body_of_function} 示例:{ x:Int, y:Int -> x + y }

lambda表达式始终用花括号包围,实参并没有用括号括起来。箭头把实参列表和lambda的函数体隔开

阅读剩下更多

Android

Android-kotlin-coroutine协程的概念

Android-kotlin-coroutine协程的概念

一. 进程,线程,协程 概念

进程与线程
  • 进程是资源分配的最小单位,线程是程序执行的最小单位。

  • 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段,这种操作非常昂贵。而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多。

    为了加大一个应用可使用的内存通过多进程来获取多份内存空间
    通过给四大组件指定android:process属性可以轻易开启多进程

  • 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程之间的通信需要以通信的方式(IPC-跨进程通信)进行。不过如何处理好同步与互斥是编写多线程程序的难点。

    跨进程通信方式有:

     1. 通过Intent(Bundle)附加extras来传递信息

     2. 通过共享文件来共享数据

     3. 采用Binder方式来是想跨进程通信

     4. 采用ContentProvider

     5. 采用socket

  • 但是多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进程死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

    延申到android崩溃同样道理。

    app中大量Web页面的使用容易导致App内存占用巨大,存在内存泄露,崩溃率高等问题,WebView独立进程的使用是解决Android WebView相关问题的一个合理的方案。

进程与线程

阅读剩下更多

Android

Android子线程切换到UI线程方法总结

线程切换

通过消息发送(发布)和接收(订阅)的方式切换的。

1 .Handler

子线程(非UI线程)调用handler对象sendMessage(msg)方法,将消息发送给关联Looper,Looper将消息存储在MessageQueue消息队列里面。

然后轮巡取出MessageQueue中的消息给UI线程中handler处理,handler得到消息调用handleMessage方法处理消息,从而可以更新Ui。

阅读剩下更多

Android

bsdiff&bspatch增量更新概念介绍

随着Android生态,技术越来越成熟,目前市场很多Android的项目工程很大,团队人数多,慢慢衍生出了许多组件化插件化技术。
同时也因为Android安装包apk也在逐渐增大,每次发布,用户更新apk环境复杂,如果全量更新下载apk的话在使用流量情况下,网络环境不好等等,对于用户体验是非常不好的。

首先区分下几个概念

组件化 : 把常用的模块代码,抽取lib工程或者jar达到复用的效果。
插件化:目的是把需要实现的模块或功能当做一个独立的提取出来,减少宿主的规模,当需要使用到相应的功能时再去加载相应的模块。涉及动态代理,ClassLoader,以及另一个apk资源的加载。例如:360的DroidPlugin (推荐)
热修复:往往是从修复bug的角度出发,强调的是在不需要二次安装应用的前提下修复已知的bug(涉及关键词:Hook技术、动态代理等)。例如:阿里 AndFix。
增量更新:APK增量更新是很多大厂APP采用的技术。bsdiff库生成补丁文件方式下载跟旧版本APK合成生成新版APK的原理(ligbspatch.so)。手机游戏app增量更新使用较多。例如:SmartAppUpdates

阅读剩下更多

Android

Android屏幕适配

Android屏幕适配方案

先讲述一些屏幕适配相关概念,然后介绍下3种主要的适配方案以及优缺点。

一.基本概念

1. 像素(px)

  • 像素是手机屏幕的最小构成单元。

    2. 分辨率 (px)

  • 手机在横向、纵向上的像素点数总和,一般描述成 宽高 ,即横向像素点个数纵向像素点个数。
  • 例如:1080x1920,即宽度方向上有1080个像素点,在高度方向上有1920个像素点。

    3.屏幕尺寸(inch)

  • 手机对角线的物理尺寸,单位 英寸(inch),一英寸大约2.54cm,
  • 例如:常见的尺寸有4.7寸、5寸、5.5寸、6寸

    4.屏幕像素密度 (dpi)

  • 每英寸长度上像素点个数。”dot per inch”:
  • 例如每英寸内有160个像素点,则其像素密度为160dpi。
    以上四者之间关系
  • $ √((宽px)²+(高px)²) / (屏幕尺寸inch) = (屏幕像素密度dpi) $

    5. dp,dip,sp

  • dip和dp是一个意思,都是Density Independent Pixels的缩写,即密度无关像素。
  • 例如:在Android中,规定以160dpi为基准,1dip=1px,如果密度是320dpi,则1dip=2px,以此类推。
  • android中的dp在渲染前会将dp转为px,计算公式:
    $px = density * dp;$
    $density = dpi / 160;$
    $px = dp * (dpi / 160);$
  • 注意:dp与px不一定都是2倍的关系,与屏幕像素密度dpi有关。

    6. hdpi,mdpi,xhdpi,xxhdpi,xxxhdpi

  • 用来修饰Android中的drawable文件夹及values文件夹,用来区分不同像素密度下的图片和dimen值。
  • 在设计图标时,对于五种主流的像素密度(mdpi、hdpi、xhdpi、xxhdpi 和 xxxhdpi)应按照 2:3:4:6:8 的比例进行缩放。

阅读剩下更多

Android

Kotlin与java对比

点击查看原文

Kotlin与java对比

最近因为工作关系,需要迭代维护公司现有kotlin客服聊天的项目。之前一直使用java,对于kotlin还是比较陌生的。
使用kotlin一段时间后,感触还是有点。kotlin比java真是太简洁了,一段代码,刚开始可能按java语法习惯编写,然后根据ide的提示,一步一步优化,缩减代码量,最后发现,代码量的差距很大。最后剩下的代码可能就只剩下了业务逻辑了。
kotlin结合mvvm架构,项目非常简洁。
kotlin是基于jvm编程语言,同java一样可以编译成class字节码文件。同java之间可以相互调用。

阅读剩下更多

Android

Android面试题

点击查看原文

        个人列出的一些目前常见的面试题,答案都是比较简单的说了几个关键字,具体的还是自己针对每题去查,去了解,去求证。如果有问题,还请及时指出!

1.五大布局

LinearLayout,ReativeLayout,AbsoluteLayout, FrameLayout, TableLayout

2.Activity生命周期

onCreate->onRestart->onStart->onResume->onPause->onStop->onDestory

3.Fragment生命周期

onAttch->onCreate->onCreateView->onActivityCreate->onStart->onResume->onPause-onStop->onDestoryView->onDestory->onDetach

阅读剩下更多

返回顶部