android分析之Parcel】的更多相关文章

将数据打包,跨进程传输(通过Binder).看看这货究竟是啥玩意: Parcel.java : public final class Parcel { private static final boolean DEBUG_RECYCLE = false; private static final String TAG = "Parcel"; @SuppressWarnings({"UnusedDeclaration"}) private int mNativePtr…
Android中的Parcel机制    实现了Bundle传递对象    使用Bundle传递对象,首先要将其序列化,但是,在Android中要使用这种传递对象的方式需要用到Android Parcel机制,即,Android实现的轻量级的高效的对象序列化和反序列化机制. JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等.        Android中的新的序列…
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等. 二.Android中的新的序列化机制 在Android系统中,定位为针对内存受限的设备,因此对性能要求更高,另外系统中採用了新的IPC(进程间通信)机制,必定要求使用性能更出色的对象传输方式.在这种环境下,Parcel被设计出来,其定位就是轻量级的高效的对象序列化和反序列…
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化--,其作用是能将数据对象存入字节流当中,在需要时重新生成对象.主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等. 二.Android中的新的序列化机制 在Android系统中,定位为针对内存受限的设备,因此对性能要求更高,另外系统中采用了新的IPC(进程间通信)机制,必然要求使用性能更出色的对象传输方式.在这样的环境下,Parcel被设计出来,其定位就是轻量级的高效的对象序列化和反序列…
终于还是得写一篇关于Binder的文章了.从最初接触Android到花大把时间研究Android源码,Binder一直是分析道路的拦路虎.看了几本最流行的Android源码分析书籍,每次基本上都不能把Binder相关知识看完.读透.好在一直没有放弃,第一次理解不了就跳过,下一次重新读,每次读都有新的收获.现在是时候整理整理了. 我理解的Binder是什么?一种IPC(跨进程通信)的实现方式.注意"跨进程",表明数据从一个进程"流向"了另一个进程.首先要了解为什么跨进…
APKAnalyser 是 Android 静态,虚拟分析工具,用来测试和验证 Android 应用的开发工作.ApkAnalyser 是个完整的工具链,可以修改二进制应用.用户可以改装,安装,运行,验证 logcat 的结果.ApkAnalyser 同时支持资源分析,可以解码 XML,查找资源指向和检测应用潜在问题. ApkAnalyser 是个独立的 J2SE 应用,遵循 Apache 开源协议,完全使用 Java 编写.…
来自:http://xiebaochun.github.io/ cocos2d-x Android环境搭建 cocos2d-x环境搭建比較简单,可是小问题还是不少,我尽量都涵盖的全面一些. 下载软件  cygwin.NDK(ADT):C++相关  假设之前没有Android开发环境.还须要Android SDK,Eclipse  cocos2d-x源代码  我的环境为ndk r7.cygwin1.7,Android SDK为2.2和3.0.另外,我是通过真机调试,在模拟器上不行,预计还是我T41…
为了方便Android应用开发要求我们Androidproject编制和包装有了更深入的了解,例如,我们知道这是做什么的每一步,境和工具.输入和输出是什么.等等. 在前文<命令行下Android应用开发>中我们已经知道怎样创建一个Androidproject和编译执行可调试版本号的应用程序.本文将介绍Androidproject的整个编译过程. 首先来分析Ant怎样将Androidproject编译打包成APK文件 运行ant debug命令时ant 脚本build.xml各target之间的…
三.接上一节,分析windowManager中添加一个悬浮框的方式,首先看代码 WindowManager.LayoutParams params = new LayoutParams(); params.width = width; params.height = height; params.format = PixelFormat.TRANSLUCENT; params.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_…
本文将主要介绍addview方法,在windowManager.window.viewGroup中的实现原理.首先将介绍这些类结构关系,然后分析其内在联系,介绍实现原理,最后介绍重要的一个参数windowManager.layoutParams. 文章预计分为三个部分. 一.首先介绍一下上述接口.类的结构 接口:windowManager 用来在应用与window之间的管理接口,管理窗口顺序,消息等 public interface WindowManager extends android.v…
1 问题描述 问题本身比较清晰简单,但推敲的过程中发现了不少有意思的东西. 在C++ SDK回调JNI至Java Observer函数中,直接操作了UI界面textView.setText(msg),第一次回调没有崩溃,第二次回调(或者退出Activity)时才会崩溃.奇怪不?崩溃栈信息如下: - :: W ackor : [KLH]OnNotifyClick - jenv=0x920544c0 - :: W ackor : [KLH]OnNotifyClick - jenv=0x920544c…
上一篇中我们透过源码看到了Parcel背后的机制,本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效. 我们接下来要说的是Parcel类如何应用.就应用程序而言,最常见使用Parcel类的场景就是在Activity间传递数据.没错,在Activity间使用Intent传递数据的时候,可以通过Parcelable机制传递复杂的对象. 下面来看一下简单的代码: UserInfo类,实现了Parcelable接口: packag…
分析Java层的ServiceManager,看看Binder在Java层是如何实现的. public final class ServiceManager { private static final String TAG = "ServiceManager"; private static IServiceManager sServiceManager;//IserviceManager是一个接口,定义了通用(公共)方法. private static HashMap<Str…
前序:每个APP对应一个进程,该进程内有一个ActivityThread的线程,称为主线程(即UI主线程),此外,还有其他线程,这个再论. android的消息系统分析. 每个Thread只对应一个Looper 每个Looper只对应一个MessageQueue 每个MessageQueue中有N个Message 每个Message中最多指定一个Handler来处理事件 一个Thread可以对应多个Handler Looper负责从消息队列中(MessageQueue)取出消息(Message/…
hierarchyviewer.bat或者monitor.bat一直都是分析layout的神器,只是.非常多时候不好用,连不上真机,害的我不得不使用模拟器来分析layout. 今天发现了另外一个神器.就在ADT里面,它就躺在那.我怎么一直就没发现? Dump View Hierarchy for UI Automator…
保存文件到sd卡需要判断sd卡的大小,通过查看android系统的自带应用的源代码,得到方法,sdk下面的source是sdk的源代码,包含的是android.Jar下面的所有class的源代码.在android系统源代码中有ndk(java调c),dalvik虚拟机等,里面packages/apps/settings是设置的源代码. 导入一个源代码,import ==> general ==> existing projects into workspace 选择完root目录后会报错(no…
本文说明 Android 项目组成,虽然简单,但决不能忽视. 当你从简单 Hello World 程序,到会实现一些常见功能,比如,下拉(上拉)刷新最新(加载更多),消息处理(UI 通知更新),ViewPager 滑动效果,启动动画,访问网络文件,进行一些复杂的界面布局等等,再到调试一些开源项目,最后自己编写 Android 程序.可当调试一些开源项目时,尤其是那些比较大的开源项目,你会发现一些"意想不到"的情况,它们无论从界面,还是从功能,界面够炫,功能强大,也正因为如此,需要更多的…
Condition的含义是条件变量,其实现依赖于系统,一般都要配合Mutex使用,使用步骤为:给mutex上锁(Lock),调用wait等待"条件"发生,如果没有发生则re-wait(),最后释放mutex(unlock),并继续执行.所有等待(wait)同一个"条件变量(condition)"的线程都要使用相同的一把锁--这样相当于互斥操作该Condition. // ------------------------------------------------…
Android的锁是对Linux锁的一种包装: // --------------------------------------------------------------------------- namespace android { // --------------------------------------------------------------------------- class Condition; /* * Simple mutex class. The im…
智能指针是一个包装类,该类有一个指针指向真正的类对象 引用计数型智能指针,该引用计数是在应该被真正类所持有,而非包装类(智能指针) 为了方便,会将引用计数单独实现在一个类中,这样所有继承它的类都有计数器 // --------------------------------------------------------------------------- template <typename T> class sp { public: inline sp() : m_ptr(0) { }…
线程与线程类要区分开来. 抽象来说,线程是CPU调度的最小单位,但是线程总要执行代码,这个代码就在线程类里说明(即Thread类).无论如何,Thread只是一个类,但其功能就是"启动一个线程,运行用户指定的Runnable".创建一个线程有两种方式: 继承一个Thread类,实现其run()方法 直接实现Runnable,并用Runnable对象构造Thread对象 这两种方法,最后都是调用VMThread.create(this, stacksize)来真正创建一个线程,线程执行的…
Serialize是java原生就自带的东西,我们可以看到android的源码 所以看看android是如何实现parcel的,这对我们自己代码设计有什么启发. Parcel: 在android中,parcel的源码如下: Frameworks/base/core/java/android/os/Parcel.java /** * Write an integer value into the parcel at the current dataPosition(), * growing dat…
一.先从Serialize说起 我们都知道JAVA中的Serialize机制,译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象. 主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等. 二.Android中的新的序列化机制 在Android系统中,定位为针对内存受限的设备,因此对性能要求更高,另外系统中採用了新的IPC(进程间通信)机制.必定要求使用性能更出色的对象传输方式.在这种环境下.Parcel被设计出来,其定位就是轻量级的高效的对象序列化和反序…
一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态,以及通过网络传输对象等. 二.Android中的新的序列化机制 在Android系统中.定位为针对内存受限的设备,因此对性能要求更高,另外系统中採用了新的IPC(进程间通信)机制,必定要求使用性能更出色的对象传输方式.在这种环境下,Parcel被设计出来,其定位就是轻量级的高效的对象序列化和反序列…
<深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分.在一个特别讲究颜值的时代.本书分析了Android 4.2中WindowManagerService.ViewRoot.Input系统.StatusBar.Wallpaper等重要"颜值绘制/处理"模块 注意,此处连载的节选是出版社未排版的内容. 第2章 深入理解Java Binder和M…
这几年,Android开始慢慢流行起来,很多项目也开始涉及这部分内容,所以学习Android也就变的很有意义了. 学什么 学习Android应该学什么,很多人有不同的见解.一般程序员可能只是学习Android的UI控件和Android的API使用等.高级程序员可能会研究一下Android的FrameWork和Android的实现原理.相对于这两者,顶级的程序员会深入的了解Android的层次架构和设计思想并将这些架构和设计思想加以改造.优化之后应用在其他方面.你会怎么做呢? Android层次架…
转自:http://www.linuxidc.com/Linux/2014-10/108438.htm 本文主要来自$Android_SOURCE/system/init/readme.txt的翻译. 1 简述 Android init.rc文件由系统第一个启动的init程序解析,此文件由语句组成,主要包含了四种类型的语句:Action,Commands,Services,Options.在init.rc文件中一条语句通常是占据一行.单词之间是通过空格符来相隔的.如果需要在单词内使用空格,那么得…
Using self-defined Parcelable objects during an Android AIDL RPC / IPC call In my previous post “Using the Android Interface Definition Language (AIDL) to make a Remote Procedure Call (RPC) in Android” I’ve explained the basics on how inter-process c…
1.AIDL文本解释 在软件工程中,接口定义语言(IDL)已经成为通用术语,是用来描述软件组件接口的特定语言.在Android中,该IDL被称为Android接口定义语言(AIDL),它是纯文本文件,使用Java类似语法编写.但是,编写Java接口的编写AIDL文件还有有些不同的. 首先,对所有的非原始类型参数,需要指定如下三种类型方向指示符之一:in,out,inout.in类型方向指示符只用于输入,客户端不会看到Service对对象的修改.out类型表明输入对象不包含相关的数据,但会由Ser…
一.代码 1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match…