Andorid_tips_ext

布局

  • LinearLayout 线性布局
    布局的层级多(嵌套多)
    android:orientation="vertical" | "horizontal" 垂直| 横向
    weight 属性:match_parent 的时候值越小,占的空间越大
    wrap_content 的时候值越小,占的空间越小
    0dp 的时候值越小,占的空间越小(推荐写法)
  • RelativeLayout 相对布局布局的层级少(嵌套少)
  • FrameLayout 帧布局Activity的布局最外层有一个FrameLayout

屏幕适配

名称 像素密度范围
mdpi 120dpi~160dpi
hdpi 160dpi~240dpi
xhdpi 240dpi~320dpi
xxhdpi 320dpi~480dpi
xxxhdpi 480dpi~640dpi
  1. 使用wrap_content、match_parent、weight要确保布局的灵活性并适应各种尺寸的屏幕。
  2. 长度单位使用 dp ,文章使用 sp。
  3. 控件宽高多采用文件大小,然后使用 padding

Activity

onCreate: Activity正在创建,生命周期的第一个方法。在此方法中做一些初始化工作(setContentView加载界面布局,加载基本数据)
onStart: Activity 正在启动,已经可见,但在后台(没有获得焦点)
onResume: Activity获得焦点出现在前台可以交互
onPause: Activity 正在停止,可做一些数据存储,停止动画...
onStop: Activity 停止,不可见
onDestory: Activity 销毁,进行资源回收
onRestart:Activity 正在重现启动,是当前Activity从不可见到可见状态会触发onActivityResult: 在Activity中得到新打开Activity关闭后返回的数据onSaveInstanceState:Activity被销毁,调用此方法保存当前状态,在onStop之前调用onRestoreInstanceState:Activity 被重启调用,通过Bundle传递保存的数据,在onStart 之后调用
onNewIntent
onTouchEvent 触摸屏幕时调用,可以获取手势的位置
onKeyUp 键盘事件,点击来手机按键onWindowAttributesChangedonWindowFocusChangedonBackPressed 返回键点击onCreateOptionsMenu 加载菜单布局
onOptionsItemSelected 响应菜单选项

Service

Service运行于主线程,和Thread没有任何关系,耗时操作需要再开线程
startService
bindService
IntentService
它创建了一个独立的工作线程来处理所有的通过onStartCommand()传递给服务的intents。创建了一个工作队列,来逐个发送intent给onHandleIntent()。不需要主动调用stopSelft()来结束服务。因为,在所有的intent被处理完后,系统会自动关闭服务。默认实现的onBind()返回null默认实现的onStartCommand()的目的是将intent插入到工作队列中

Broadcast

静态和动态两种注册方法:
静态注册, 在AndroidManifest.xml中加上标签。动态注册, 通过 Context.registerReceiver()方法进行注册。比如在onResume中注册,在onPause中注销。

ListView 优化

listview现在最常用也拥有很好的性能的优化方式是在Adapter中使用静态的ViewHolder
在Adapter的代码中,在getView方法里首先判断convertView是否为空,若为空则加载相应布局,若不为空则
直接使用该布局,这能够很有效的使用Android为listview提供的缓存机制:只加载一屏的布局,之后滑动出来的item使用的是之前已经加载的布局的缓存;
多 item 使用 viewtype

事件分发

Andorid_tips_ext_第1张图片
dispath_event.png

多进程

  • AsyncTask
    继承时为AsyncTask类指定三个泛型参数,
    Params
    在执行AsyncTask时需要传入的参数,可用于在后台任务中使用。
    Progress
    后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位。
    Result
    当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型。

// 在后台任务开始执行之前调用,用于进行一些界面上的初始化操作,如显示一个进度条对话框
onPreExecute
// 子线程中运行,任务完成会return执行结果
doInBackground
// 进行UI操作
onProgressUpdate
// 任务执行完会retrun结果,就好执行此方法,返回结果做为参数传到此方法中
onPostExecute

  • Handler
    Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会崩溃。Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行

描述:Looper负责的就是创建一个MessageQueue,然后进入一个无限循环体不断从该MessageQueue中读取消息,而消息的创建者就是一个或多个Handler

Message:消息体,用于装载需要发送的对象。

handler:它直接继承自Object。作用是:在子线程中发送Message或者Runnable对象到MessageQueue中;在UI线程中接收、处理从MessageQueue分发出来的Message或者Runnable对象。发送消息一般使用Handler的sendMessage()方法,而发出去的消息经过处理后最终会传递到Handler的handlerMessage()方法中。

MessageQueue:用于存放Message或Runnable对象的消息队列。它由对应的Looper对象创建,并由Looper对象管理。每个线程中都只会有一个MessageQueue对象。

Looper:是每个线程中的MessageQueue的管家,循环不断地管理MessageQueue接收和分发Message或Runnable的工作。调用Looper的loop()方法后,就会进入到一个无限循环中然后每当发现MessageQueue中存在一条消息,就会将它取出,并调用Handler的handlerMessage()方法。每个线程中也只会有一个Looper对象。
使用ThreadLocal来实现Looper的存储(多线程内存共享时,使用ThreadLocal存储的变量在各线程中不一致)

网络加载

Andorid_tips_ext_第2张图片
Volley-run-flow-chart.png

图片加载

view 绘制流程

当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 Android framework 处理.绘制是从根节点开始,对布局树进行 measure 和 draw。整个 View 树的绘图流程在ViewRoot.java
类的performTraversals()

函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下:
Andorid_tips_ext_第3张图片
viewdrawflow img
Andorid_tips_ext_第4张图片
view_draw_method_chain.png

自定义控件

1、自定义View的属性
2、在View的构造方法中获得我们自定义的属性
3、重写onMesure
4、重写onDraw

H5 容器

你可能感兴趣的:(Andorid_tips_ext)