安卓学习笔记

安卓笔记

关于进程顺序

重要性依次是:前台进程,可见进程,服务进程,后台进程和空进程;因此销毁的顺序是逆方向。html

前台进程(foreground): 目前正在屏幕上显示的进程和一些系统进程。举例来讲,Dialer Storage,Google Search等系统进程就是前台进程;再举例来讲,当你运行一个程序,如浏览器,当浏览器界面在前台显示时,浏览器属于前台进程(foreground),但一旦你按home回到主界面,浏览器就变成了后台程序(background)。 咱们最不但愿终止的进程就是前台进程。java

可见进程(visible): 可见进程是一些不在前台,但用户依然可见的进程,举个例来讲:widget、输入法等,都属于visible。这部分进程虽然不在前台,但与咱们的使用也密切相关,咱们也不但愿它们被终止(你确定不但愿时钟、天气,新闻等widget被终止,那它们将没法同步,你也不但愿输入法被终止,不然你每次输入时都须要从新启动输入法)android

次要服务(secondary server): 目前正在运行的一些服务(主要服务,如拨号等,是不可能被进程管理终止的,故这里只谈次要服务),举例来讲:谷歌企业套件,Gmail内部存储,联系人内部存储等。这部分服务虽然属于次要服务,但很一些系统功能依然息息相关,咱们时常须要用到它们,因此也太但愿他们被终止spring

后台进程(hidden): 虽然用了hidden这个词,但实际便是后台进程(background),就是咱们一般意义上理解的启动后被切换到后台的进程,如浏览器,阅读器等。当程序显示在屏幕上时,他所运行的进程即为前台进程(foreground),一旦咱们按home返回主界面(注意是按home,不是按back),程序就驻留在后台,成为后台进程(background)。后台进程的管理策略有多种:有较为积极的方式,一旦程序到达后台当即终止,这种方式会提升程序的运行速度,但没法加速程序的再次启动;也有较消极的方式,尽量多的保留后台程序,虽然可能会影响到单个程序的运行速度,但在再次启动已启动的程序时,速度会有所提高。这里就须要用户根据本身的使用习惯找到一个平衡点 内容供应节点(content provider): 没有程序实体,仅仅提供内容供别的程序去用的,好比日历供应节点,邮件供应节点等。在终止进程时,这类程序应该有较高的优先权 空进程(empty): 没有任何东西在内运行的进程,有些程序,好比BTE,在程序退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,做用每每是提升该程序下次的启动速度或者记录程序的一些历史信息。 这部分进程无疑是应该最早终止的。 补充: 系统会对进程的重要性进行评估,并将重要性以“oom_adj”这个数值表示出来,赋予各个进程;(系统会根据“oom_adj”来判断须要结束哪些进程,通常来讲,“oom_adj”的值越大,该进程被系统选中终止的可能就越高) 前台程序的“oom_adj”值为0,这意味着它不会被系统终止,一旦它不可访问后,会得到个更高的“oom_adj”,推测“oom_adj”的值是根据软件在LRU列表中的位置所决定的; Android不一样于Linux,有一套本身独特的进程管理模块,这个模块有更强的可定制性,可根据“oom_adj”值的范围来决定进程管理策略,好比能够设定“当内存小于X时,结束“oom_adj”大于Y的进程”。这给了进程管理脚本的编写以更多的选择。数据库

  1. 前台进程数组

    用户当前操做所必需的进程。若是一个进程知足如下任一条件,即视为前台进程:浏览器

    一般,在任意给定时间前台进程都为数很少。只有在内存不足以支持它们同时继续运行这一万不得已的状况下,系统才会终止它们。 此时,设备每每已达到内存分页状态,所以须要终止一些前台进程来确保用户界面正常响应。缓存

  2. 可见进程安全

    没有任何前台组件、但仍会影响用户在屏幕上所见内容的进程。 若是一个进程知足如下任一条件,即视为可见进程:服务器

    • 托管不在前台、但仍对用户可见的 Activity(已调用其 onPause() 方法)。例如,若是前台 Activity 启动了一个对话框,容许在其后显示上一 Activity,则有可能会发生这种状况。
    • 托管绑定到可见(或前台)Activity 的 Service

    可见进程被视为是极其重要的进程,除非为了维持全部前台进程同时运行而必须终止,不然系统不会终止这些进程。

  3. 服务进程

    正在运行已使用 startService() 方法启动的服务且不属于上述两个更高类别进程的进程。尽管服务进程与用户所见内容没有直接关联,可是它们一般在执行一些用户关心的操做(例如,在后台播放音乐或从网络下载数据)。所以,除非内存不足以维持全部前台进程和可见进程同时运行,不然系统会让服务进程保持运行状态。

  4. 后台进程

    包含目前对用户不可见的 Activity 的进程(已调用 Activity 的 onStop() 方法)。这些进程对用户体验没有直接影响,系统可能随时终止它们,以回收内存供前台进程、可见进程或服务进程使用。 一般会有不少后台进程在运行,所以它们会保存在 LRU (最近最少使用)列表中,以确保包含用户最近查看的 Activity 的进程最后一个被终止。若是某个 Activity 正确实现了生命周期方法,并保存了其当前状态,则终止其进程不会对用户体验产生明显影响,由于当用户导航回该 Activity 时,Activity 会恢复其全部可见状态。 有关保存和恢复状态的信息,请参阅 Activity文档。

  5. 空进程

    不含任何活动应用组件的进程。保留这种进程的的惟一目的是用做缓存,以缩短下次在其中运行组件所需的启动时间。 为使整体系统资源在进程缓存和底层内核缓存之间保持平衡,系统每每会终止这些进程。

java中的运行异常, 检查非检查异常

运行异常:编译器直接抛出的异常

非检查异常:必须用try catch来进行抛出的异常, 主要涉及IO相关,数据库链接相关的异常;

运行异常包括:

Runtime Exception主要包括如下这些:

ArithmeticException, 算术异常

ArrayStoreException, 将数组类型不兼容的值赋值给数组元素时抛出的异常

BufferOverflowException, 缓冲区溢出异常

BufferUnderflowException, 缓冲区下溢异常

CannotRedoException, 不能重复上一次操做异常

CannotUndoException, 不能撤销上一次操做异常

ClassCastException, 类型强制转换异常

ClassNotFoundException 类没找到时,抛出该异常

CMMException, CMM异常

ConcurrentModificationException, 对 Vector 、ArrayList在迭代的时候若是同时对其进行修改就会抛出异常 org.springframework.jdbc.CannotGetJdbcConnectionException 服务器端数据库链接不上时,抛出该异常 CannotGetJdbcConnectionException 网络没有链接或网络中断

DOMException, DOM异常 EOFException, 文件已结束异常

EmptyStackException, 空栈异常

FileNotFoundException, 文件未找到异常

IllegalArgumentException, 传递非法参数异常

IllegalMonitorStateException, IllegalAccessException, 访问某类被拒绝时抛出的异常

IllegalPathStateException, 非法的路径声明异常

IllegalStateException, 非法声明异常

ImagingOpException, 成像操做异常

IndexOutOfBoundsException, 下标越界异常

IOException, 输入输出异常

NegativeArraySizeException, 数组负下标异常

NoSuchMethodException 在类中没法找到某一特定方法时,抛出该异常

NoSuchElementException, 方法未找到异常

NoSuchFieldException 类不包含指定名称的字段时产生的信号(bean中不存在这个属性 ) NumberFormatException, 字符串转换为数字异常

NullPointerException, 空指针异常

ProfileDataException, 没有日志文件异常

ProviderException, 供应者异常

RasterFormatException, 平面格式异常

SecurityException, 违背安全原则异常

SQLException, 操做数据库异常

SystemException, 系统异常

UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException, 不支持的操做异常

夸进程的方式

1.访问其余应用程序的Activity

2.Content Provider

3.广播(Broadcast)

4.AIDL服务

安卓的动画分类

Android的 动画分为3种,具体以下所示:

  • 帧动画:也就是咱们说的 Frame 动画。 Frame 动画是一系列图片按照必定的顺序展现的过程,和放电影的机制类似,它的原理是在必定的时间段内切换多张有细微差别的图片从而达到动画的效果。因为是一帧一帧加载,因此须要较多的图片。从而增大 APK 的大小,不过 Frame 动画能够实现一些比较难的效果,例如:等待的环形进度。 所涉及到的 Java 对象有: AnimationDrawable 。

  • 补间动画:也就是 Tween 动画,是操做某一个控件让其展示出旋转、渐变、移动、缩放的一种转换过程。是一种视觉上的变化,不是真正位置上的变化。只能运用在 View 对象上,而且功能相对来讲较为局限。例如:旋转动画只可以在 x 、 y 轴进行,而不能在 z 轴放心进行旋转。所以,补间动画一般用于执行一些比较简单的动画。 所涉及到的 Java 对象有: AlphaAnimation (渐变更画)、 ScaleAnimation (缩放动画)、 TranslateAnimation (位移动画)、 RotateAnimation (旋转动画)。

  • 属性动画:是 Android 3.0 以后推出的,其机制再也不是针对 View 来设计的,也不限于只能实现移动、缩放、旋转和淡入这几种简单的动画操做,同时也再也不只是一种视觉上的动画效果。属性动画其实是一种在必定时间段内不断修改某个对象的某个属性值的机制。 所涉及到的 Java 对象有: ValueAnimator 、 ObjectAnimator 。

    GLSurfaceView**是一个视图,

  • 继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。

    ​ GLSurfaceView提供了下列特性:

    ​ 1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。

    ​ 2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

    ​ 3> 用户自定义渲染器(render)。

    ​ 4> 让渲染器在独立的线程里运做,和UI线程分离。

    ​ 5> 支持按需渲染(on-demand)和连续渲染(continuous)。

    ​ 6> 一些可选工具,如调试。

Intent/Bundle 支持传递:

1) 基本类型的数据和基本类型的数组数据

2) String/CharSequence 类型的数据和 String/CharSequence 类型的数组数据

3) 传递 Parcelable (包裹化,邮包)和 Serializable (序列化)类型的数据,以及它们的数组/列表数据】

ps:file对象继承于Serializable数据

anr缘由

  1. 前台进程,input五秒
  2. 广播超过10S会形成ANR
  3. service 20s没有处理完成

安卓中Style的写法

标签嵌套是resources>style>item

安卓中的架构分层

undefined

Android数据持久化有五种方式:

一、SharedPreferences

二、内部存储(例如经过openFileOutput()打开一个文件输入输出流)

三、SQLite Database

四、网络链接(将数据存储到服务器上)

五、外部存储(SD卡)

Parcelable和Serializable 俩者异同

一、Serializable在序列化的时候会产生大量的临时变量,从而引发频繁的GC;

二、在使用内存的时候,Parcelable比Serializable性能高,因此推荐使用Parcelable。

三、Parcelable不能使用在要将数据存储在磁盘上的状况,由于Parcelable不能很好的保证数据的持续性在外界有变化的状况下。尽管Serializable效率低点,但此时仍是建议使用Serializable 。

安卓中得到屏幕属性

获取屏幕密度 getScreen

获取设备屏幕大小 getDisplay

得到屏幕的属性,从而取得屏幕的高度和宽度 getMetrics

得到window对象 getWindows

安卓中短信相关的权限

短信相关权限







GLSurfaceView

GLSurfaceView是一个视图,继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。

​ GLSurfaceView提供了下列特性:

​ 1> 管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。

​ 2> 管理一个EGL display,它能让opengl把内容渲染到上述的surface上。

​ 3> 用户自定义渲染器(render)。

​ 4> 让渲染器在独立的线程里运做,和UI线程分离。

​ 5> 支持按需渲染(on-demand)和连续渲染(continuous)。

​ 6> 一些可选工具,如调试。

安卓NDK

https://www.jianshu.com/p/0261e6cceb3e

RadioButton和CheckBox的区别:

一、单个RadioButton在选中后,经过点击没法变为未选中

​ 单个CheckBox在选中后,经过点击能够变为未选中

二、一组RadioButton,只能同时选中一个

​ 一组CheckBox,能同时选中多个

三、RadioButton在大部分UI框架中默认都以圆形表示

​ CheckBox在大部分UI框架中默认都以矩形表示

RadioButton和RadioGroup的关系:

一、RadioButton表示单个圆形单选框,而RadioGroup是能够容纳多个RadioButton的容器

二、每一个RadioGroup中的RadioButton同时只能有一个被选中

三、不一样的RadioGroup中的RadioButton互不相干,即若是组A中有一个选中了,组B中依然能够有一个被选中

四、大部分场合下,一个RadioGroup中至少有2个RadioButton

五、大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup中的起始位置

Activity四种状态:

一、running

二、paused

三、stopped

四、killed

相关文章
相关标签/搜索