Handler/synchronized/Actvitiy、Application

来源:互联网 发布:准星软件 编辑:程序博客网 时间:2024/06/11 06:19

> Handler的机制与源码分析

Android消息机制Handler解析(源码+Demo)-- http://m.blog.csdn.net/article/details?id=51031331
Handler 源码分析-- http://blog.csdn.net/miraclemin/article/details/6556620
【Android】从源码中探讨Handler机制-- http://blog.csdn.net/rongxinhua/article/details/20576185

[ 假如在同一个Activity中,有多个线程同时更新UI,且没有加锁,那会导致什么问题呢?UI更新混乱。
假如加锁呢?会导致性能下降。
使用Handler机制,我们不用去考虑多线程的问题,所有更新UI的操作,都是在 主线程消息队列中轮询去处理的。]


> synchronized 静态 非静态 方法 使用不同锁对象-- http://blog.csdn.net/hahahappy1986/article/details/8082791
  静态:class对象的锁
  非静态:本对象的锁

Synchronized 静态方法和非静态方法的异同-- http://www.cnblogs.com/abcjun/articles/4711159.html


> Android 中this(Actvitiy)、 getApplicationContext()、getApplication()之间的区别

  首先Activity和Application都是Context的子类。Context从字面上理解就是上下文的意思,在实际应用中它也确实是起到了管理上下文环境中各个参数和变量的总用,方便我们可以简单的访问到各种资源。虽然Activity和Application都是Context的子类,但是他们维护的生命周期不一样。

前者维护一个Acitivity的生命周期,所以其对应的Context也只能访问该activity内的各种资源。后者则是维护一个Application的证明周期。

  this(Actvitiy):代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this.
  getApplicationContext():生命周期是整个应用,应用摧毁,它才摧毁。
  getApplication():andorid 开发中共享全局数据;

> AIDL/IPC/IBinder

Android的IPC机制-- http://blog.csdn.net/zizidemenghanxiao/article/details/50341773
Android IBinder机制简单介绍-- http://blog.csdn.net/mr_liabill/article/details/49837851
  运行在同一个进程中的组件是属于同一个虚拟机和同一个Application的,同理运行在不同进程的组件是属于两个不同的虚拟机和Application的。
  Client端使用的Poxy里面封装了一个binder与Server端的stub(也是一个binder对象)进行交互,两个binder作为接口调用BinderDriver的transact来发送数据包,以及onTransact接收处理数据包。
  Binder作为一种进程间通信机制,负责提供远程调用的功能(RPC),它的系统组件主要包括四种:Client, Server, ServiceManager, Binder Driver. 
  Client, Server, ServiceManager运行在系统的用户态,而Binder Driver运行在内核态。为了完成Client端到Server端的通信任务,用户空间的需要操作Binder Driver提供的/dev/binder文件来完成交互。那么ServiceManager的工作是什么呢?ServiceManager负责管理Server并向Client端提供一个Server的代理接口(proxy)。通过代理接口中定义的方法,Client端就可以使用Server端提供的服务了。整个过程如下:
  Client端调用代理接口的方法,将Client的参数打包为parcel对象发送给内核空间中BinderDriver;
  Server端读取到BinderDriver中的请求数据,将parcel对象解包并处理;
  处理好后,将处理结果打包返回给BinderDriver,再交给Client端。
另外,Client端与Server端的调用过程是同步的,即在Server返回结果之前,Client端是阻塞的。

四大组件中的三大组件(Activity、Service、Receiver)都是支持在Intent中传递Bundle数据的
  由于Bundle实现了Parcelable接口,所以它可以方便的在不同的进程间传输。我们可以在Bundle中附加我们需要传输给远程进程的信息并通过Intent发送出去。

使用Socket进行通信,不能再主线程中访问网络
  因为这会导致我们的程序无法在Android4.0及以上的设备上运行,会抛出异常:android.os.NetworkOnMainThreadException。而且进行网络操作很可能是耗时的。


0 0