摘要:
之前都是在自研的产品上做开发,而且我们的屏幕是1dip=1px的,所以在写App布局的时候,随便写单位,也没觉得什么不妥。可是近期我把以前的App里面的一些自定义控件在emulator上跑的时候,才发现显示怎么变奇怪了。这才好好了解了一下Android的显示相关的东西,整理在这边。1.屏幕尺寸(screen size)就是我们平常讲的手机屏幕大小,是屏幕的对角线长度,一般讲的大小单位都是英寸。比如iPhone5S的屏幕尺寸是4英寸。Samsung Note3是5.7英寸。2.像素(pixel)想像把屏幕放大再放大,对!看到的那一个个小点或者小方块就是像素了。3.分辨率(Resolution)是 阅读全文
摘要:
1.IBinder的传递Binder IPC通信中,Binder是通信的媒介,Parcel是通信的內容。远程调用过程中,其参数都被打包成Parcel的形式來传递。IBinder对象当然也不例外,在前一篇 Binder机制,从Java到C (4. Parcel) 中说到IBinder对象是能够进行进程间传递的。下面就看一下IBinder对象在传递过程中会有什么变化。在IPC通信的Proxy端,我们经常可以看到下面类似的代码,一些参数都会打包到Parcel中。看下面的data和reply。 1 public void publishService(IBinder token, 2 ... 阅读全文
摘要:
1. 远程调用的数据传输在远程的函數中,必然会需要传递一些数据,那这些数据是怎么传输的呢?在IPC中,Proxy端的作用就是将一些参数打包,然后发送出去,下面是在Proxy端经常会遇见的调用远程方法的代码。可以看到,发送和接收的数据都是通过Parcel來打包的。 1 class ActivityManagerProxy implements IActivityManager 2 { 3 public int startActivity(IApplicationThread caller, Intent intent, 4 String resolvedType,... 阅读全文
摘要:
上一篇Binder机制,从Java到C (2. IPC in System Service :AMS) 中提到 Application是通过ServiceManager找到了AMS 的service代理对象。那在这个之前当然是要先找到ServiceManager的代理对象,才能调用ServiceManager的服务嘛。下面就看看怎么来获得这个代理对象的吧:还记得上一篇调用的ServiceManager的方法吧:IBinder b = ServiceManager.getService("activity");那下面就來看一下ServiceManager.getService 阅读全文
摘要:
1.建立Activity和Service的IPC之前在上一篇 Binder机制,从Java到C (1. IPC in Application Remote Service) 里面有说到Activity通過AMS的bindService(),触发Service的onBind(),然后会调用Client的onServiceConnected() 回调方法,把一個Binder代理对象传递给Client。那实际上,AMS也是一个Service,那它是运行在另外一個process,所以Activity要调用AMS.bindService()。来建立Application Activity和Service 阅读全文
摘要:
Binder驱动的代码都在kernel里面,这里就简单讲一下里面涉及到的几个东西:1.MemoryBinder其实本质上就是一中数据传输方式,这种方式是通过binder driver实现的。我们知道其他的一些IPC的方法,在传递数据的时候,一般都会有两次拷贝,发送者拷贝到底层,底层再拷贝给接收者。但是Binder通过共享內存进行通信,只有一次copy。看下面的图中,每个涉及到Binder通信的进程,都会有一个共享内存,它是binder驱动和进程之间的共享内存。但是进程是无法对内存进行写操作的,是只读的。Process A向Process B传递数据時,这些数据会被driver从ProcessA 阅读全文
摘要:
在第三篇Binder机制,从Java到C (3. ServiceManager in Java) 中,讲到ServiceManager的Stub端在Native,Proxy端在Java。实际上,还要加一句:Native里也有Proxy(BpServiceManager),因为ServiceManager也是要服务于其他native service嘛。ServiceManager是一个在init.rc里定义的一个system process,在系统启动的时候,它就启动了。如果它挂了,那么像zygote,media,surfaceflinger这些service就都要重启,可见它有多重要了吧。看一 阅读全文
摘要:
1.什么是NativeServiceNative Service,是通过C或C++代码写出來,提供给Java进行远程调用的RemoteService。向Android开机就启动的surfaceflinger,media都是native service。在前一篇中,我們总结了Binder通信的整個流程:Java Proxy代码走到JNI实现的BinderProxy的transact()方法之后,就直接进入到Native实现的BpBinder,然后一直通过IPCThreadState对象发送Binder消息。而在另一个process的IPCThreadState会接收Binder消息,再通过JNI 阅读全文
摘要:
1.Java和C++中的Binder从前一篇 Binder机制,从Java到C (5. IBinder对象传递形式) 中可以看到,使用Binder的Java代码,到最后都会进入到Native环境,将具体的分发工作交给执行效率更高的Native代码。而这些Native的实现都会统一到一个lib:libbinder。在前面的讲述中,我们已经接触到了native中的JavaBBinder,BBinder,JavaBBinderHolder把一些相关的类整理一下,可以得到下面Java和C++代码的关系:Java环境里的Binder的对象,会通过JNI 调用init()方法,创建一个JavaBBinde 阅读全文
摘要:
转载请标注:张新燕:http://www.cnblogs.com/zhangxinyan 1. Application 中的 service 我们知道Android中Service有三种类型:Local Service,Local Bounded Service,Remote Service。 Lo 阅读全文