第一章:Activity的生命周期和启动模式

生命周期

  • onPause表示activity正在停止,onPaus必须先执行完(栈顶的activity),新的activity的onResume才会执行。onStop表示activity即将停止(透明不会执行),可以做些稍微重量级的回收工作。onPause和 onStop不能处理太耗时的操作,因为onPause必须执行完成以后新的activity才能resume
  • onstart和onstop是从activity是否可见这个角度来回调的,而onresume和onpause是从activity是否位于前台这个角度回调的,除了这个区别,在实际使用中没有其他区别,回收或初始化数据,可以看情况提前或者靠后
  • 在activity异常终止的时候会调用onsaveinstanceState来保存当前activity的状态,正常情况情况下系统是不会调用这个方法的。可以通过onRestoreInstanceState和onCreate方法来判断activity是否被重建了,如果被重建,就可以取出之前保存的数据并恢复,俩者的区别是:onRestoreInstanceState一旦被调用,其参数bundle一定是有值的,不需要额外的判断是否为空。从时序上来说,onRestoreInstanceState的调用时机在onstart之后。
  • 一些后台工作不适合脱离四大组件而独自运行在后台中(程序退出后系统会保留一个空进程方便系统再次启动),这样进程很容易被杀死,比较好的方法是将后台工作放在service中从而保证进程有一定的优先级,这样就不会轻易被系统杀死了
  • 画曲线的是经常用的
启动模式
  • 当栈中无任何activity的时候,系统就会回收这个任务栈
  • standard:标准模式。一个任务栈中可以有多个实例,每个实例也可以属于不同的任务栈。在这种模式下,谁启动了这个activity,那么这个activity就运行在启动它的那个activity所在的栈中,比如activity A启动了activity B(B是标准模式),那么B就进入A所在的栈中
  • singleTop:栈顶复用模式。在这种模式下,如果新的activity已经位于任务栈的栈顶,那么此activity不会重复创建,同时它的onNewIntent方法会被回调,通过此方法的参数可以取出当前请求的信息。singleTask模式也会回调这个方法
  • 有俩种方法可以指定activity的启动模式。第一种是通过清单文件指定,第二种是通过intent中设置标志位来为activity指定启动模式。俩者是有却别的。首先,优先级上,第二种比第一种高,当俩种同时存在时,以第二种方式为准;其次上述俩种方式在限定范围上有所不同,比如,第一种方式无法直接为activity设定FLAG_ACTIVITY_CLEAR_TOP标示,而第二种方式无法为activity指定singleInstance模式
  • 隐式启动,只有一个intent同时匹配action、category、data才算是完全匹配,只有完全匹配才能成功启动目标activity。一个activity中可以有多个intent-filter,一个intent只要能匹配任何一组intent-filter即可成功启动对应的activity
 
 
第二章:IPC机制
  • IPC含义为进程间通信或跨进程通信,是指俩个进程间进行数据交换的过程。IPC不是android中独有的,任何一个操作系统都需要有相应的IPC机制。
  • 在android中使用多进程只有一种方法,那就是给四大组件在清单文件中指定process属性,除此之外没有其他方法
  • 多进程有这么问题,但是我们不能因为多进程有很多问题就不去正式它。为了解决这个问题,系统提供了很多跨进程通信方法,虽然不能直接的共享内存,但是通过跨进程通信还是可以实现数据交互。实现跨进程通信的方法有很多,比如通过intent来传递数据,共享文件和SharedPreferences,基于binder的message和AIDL以及Socket等
  • serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和binder传输数据时就需要使用他们。还有的时候我们需要把对象持久化到存储设备上或者通过网络传输给其他客户端,这个时候也需要序列化
  • 用serializable序列化,只需要这个类实现serializable接口并声明serialVersionUID即可,实际上,甚至这个serialVersionUID也不是必须的,不声明这个serialVersionUID同样可以实现序列化,但是这会对反序列化产生影响。当反序列化的时候系统会去检测文件中的serialVersionUID,看他是否和当前类的serialVersionUID一致,如果一致就说明序列化的类的版本和当前类的版本是相同的,这个时候可以成功序列化。如果类结构发生了非常规性改变,比如修改了类名、成员变量类型,反序列化就会失败,因为类结构有了毁灭性的改变,根本无法从老版本的数据还原出一个新的类结构对象。注意:静态成员变量属于类不属于对象,所以不会参与序列化过程,其次用transient关键字标记的成员变量不参与序列化过程

  

  • AIDL的使用流程:首先创建一个服务service和一个aidl接口,接着创建一个类继承自aidl接口中的stub类并实现stub中的抽象方法(就是定义接口的方法),在service的onbinder方法中返回这个类的对象,然后在客户端就可以绑定服务端service,建立连接后就可以访问远程服务端的方法了
  • 如果公司项目庞大了,现在有10个不同的业务模块都需要使用aidl来进行进程间通信,不需要创建10个、100个服务,可以将所有的aidl放在同一个服务里去管理,用binder连接池,具体看书

                      

 
第六章:android中的drawable
  • Drawable表示的是一种可以在Canvas上进行绘制的抽象概念,它的种类有很多,最常见的颜色和图片都可以是一个Drawable。优点:首先,它的使用简单,比自定义view的成本要低;其次,非图片类型的Drawable占用空间较小,这对减少apk的大小也很有帮助。Drawable常用来作为view的背景使用,一般都是通过XML来定义的,也可以用代码来创建具体的Drawable,创建比较复杂。
  • Drawable的内部宽高通过getIntrinsicWidth和getIntrinsicHeight这来个方法可以获得。但是并不是所有的Drawable都有宽高,比如一张图片所形成的Drawable,它的内部宽高就是图片的宽高,但是一个颜色所形成的Drawable,它就没有内部宽高的概念,另外需要注意的是,Drawable的内部宽高不等于它的大小,一般来说,Drawable是没有大小概念的,当用作view的背景时,Drawable会被拉伸至view的同等大小
  • Drawable的分类(子类):BitmapDrawable、ShapeDrawable、StateListDrawable、LevelListDrawable、TransitionDrawable、InsetDrawable、ScalDrawable、ClipDrawable等
  • Drawable的使用范围很单一,一个是作为imageview中的图像来显示,另外一个就是作为view的背景
 
 
 
 
 
 
 
 
 
 
 

Android开发艺术探究Note的更多相关文章

  1. Android开发艺术探索读书笔记——01 Activity的生命周期

    http://www.cnblogs.com/csonezp/p/5121142.html 新买了一本书,<Android开发艺术探索>.这本书算是一本进阶书籍,适合有一定安卓开发基础,做 ...

  2. Android开发艺术探索笔记——View(二)

    Android开发艺术探索笔记--View(二) View的事件分发机制 学习资料: 1.Understanding Android Input Touch Events System Framewo ...

  3. Android开发艺术探索笔记—— View(一)

    Android开发艺术探索笔记 --View(一) View的基础知识 什么是View View是Android中所有控件的基类.是一种界面层控件的抽象. View的位置参数 参数名 获取方式 含义 ...

  4. android开发艺术探索

    android开发艺术探索  百度任玉刚 http://blog.csdn.net/singwhatiwanna/article/details/46810527

  5. 《Android开发艺术探索》读书笔记 (13) 第13章 综合技术、第14章 JNI和NDK编程、第15章 Android性能优化

    第13章 综合技术 13.1 使用CrashHandler来获取应用的Crash信息 (1)应用发生Crash在所难免,但是如何采集crash信息以供后续开发处理这类问题呢?利用Thread类的set ...

  6. 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程

    第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...

  7. Android开发艺术1之Activity的生命周期

    作为<Android开发艺术探索>这本书的第一篇博客,我就多说几句.本系列博客旨在对书中相关内容进行解读,简化,提供一个入门到提高的流程.不敢说书评,也不能说教程,只希望对有些人有帮助就好 ...

  8. 《android开发艺术探索》读书笔记(十五)--Android性能优化

    接上篇<android开发艺术探索>读书笔记(十四)--JNI和NDK编程 No1: 如果<include>制定了这个id属性,同时被包含的布局文件的根元素也制定了id属性,那 ...

  9. 《android开发艺术探索》读书笔记(十四)--JNI和NDK编程

    接上篇<android开发艺术探索>读书笔记(十三)--综合技术 No1: Java JNI--Java Native Interface(java本地接口),它是为了方便java调用C. ...

随机推荐

  1. 企业级PPTP服务器

    第一个里程碑:检查系统是否支持ppp [root@m01 ~]# cat /dev/ppp cat: /dev/ppp: No such device or address 如果出现以上提示则说明pp ...

  2. 《Office 365 开发入门指南》公开邀请试读,欢迎反馈

    终于等来了这一天,可以为我的这本新书画上一个句号.我记得是在今年的2月份从西雅图回来之后,就萌发了要为中国的Office 365开发人员写一些东西并最终能帮到更多中国用户的想法,而从2月26日正式写下 ...

  3. ABP .Net Core API和Angular前端APP独立部署跨域问题(No Access-Control-Allow-Origin)

    前言: 通过ABP官网(https://aspnetboilerplate.com)下载ASP.NET Core 2.x + Angular模板项目是按ReStful风格架构Web API和angul ...

  4. 【Zookeeper】源码分析之Leader选举(一)

    一.前言 分析完了Zookeeper中的网络机制后,接着来分析Zookeeper中一个更为核心的模块,Leader选举. 二.总结框架图 对于Leader选举,其总体框架图如下图所示 说明: 选举的父 ...

  5. Java I/O---字符与字节转换流---FileReader&FileWriter:

      public class SubTransStreamDemo { /** * @param args * @throws IOException */ public static void ma ...

  6. 什么是WAL?

    在写完上一篇<Pull or Push>之后,原本计划这一片写<存储层设计>,但是临时改变主意了,想先写一篇介绍一下消息中间件最最基础也是最核心的部分:write-ahead ...

  7. 【WebGL】《WebGL编程指南》读书笔记——第4章

    一.前言        今天继续第四章的学习内容,开始学习复合变换的知识. 二.正文        Example1: 复合变换 在书中,作者为我们封装了一套用于变换的矩阵对象:Matrix4对象.它 ...

  8. jquery获取焦点和失去焦点事件代码

    input失去焦点和获得焦点 鼠标在搜索框中点击的时候里面的文字就消失了. 我们在做网站的时候经常会用到搜索框的获得焦点和失去焦点的事件,因为懒,每次都去写非常的烦,于是就一劳永逸,遇到类似情况就来调 ...

  9. 防盗链与token运用

    为什么要防盗链? 例如手机/PC应用,如果有人知道你的api地址,和应用格式,那么他人就可以利用这个接口进行盗链:盗取/盗用里面的数据. 防盗链特性: 1.因为是非开放性的,所以所有的接口都是封闭的, ...

  10. Mac_OS_Sierra_10.12.6编译OpenJDK9

    编译环境以及依赖 macOS:Sierra,10.12.6 处理器:2.6 GHz Intel Core i7 内存:16 GB 2133 MHz LPDDR3 Command Line Tools ...