1. import 和 #include 区别
import是用来指明程序里用到的类在包中的那个位置,执行的时候它会根据这个位置找到那个类(已经编译)
而c的include是要把被include的头文件源代码包进来
2. .so , 动态库, 跟.dll类似, .c编译生成.o, 链接生成.so.
http://www.cnblogs.com/wangkangluo1/archive/2012/05/14/2498786.html
3. IPC
IPC进程间通信(Inter-Process Communication)就是指多个进程之间相互通信,交换信息的方法。
4.管道(Pipe)
管道用来连接不同进程之间的数据流
FIFO也称为有名管道,它是一种文件类型
http://blog.sina.com.cn/s/blog_62a9b1bb0100t2a7.html
5.进程间通信的工具
<1> 信号量
<2> 共享内存
共享内存允许两个或多个进程共享一定的存储区,因为不需要拷贝数据,所以这是最快的一种IPC。
<3> 消息队列
消息队列保存在内核中,是一个由消息组成的链表
linux下进程间通信的几种主要手段简介:
- 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
- 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigacti
- on函数重新实现了signal函数);
- 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
- 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
- 套接口(Socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Unix系统上:Linux和System V的变种都支持套接字。
把sp<xxx>看成是XXX*是可以的
如果一个进程要使用Binder机制,那么他的进程中必须要创建一个ProcessState对象来负责管理Service的代理对象。ProcessState的作用是维护当前进程中所有Service代理(BpBinder对象)。一个客户端进程可能需要多个Service的服务,这样可能会创建多个Service代理(BpBinder对象),客户端进程中的ProcessState对象将会负责维护这些Service代理。Android中每个进程只有一个ProcessState。因此,我们一般都是通过ProcessState::self()来引用当前进程的ProcessState实例。
Android - Binder机制 - ProcessState和IPCThreadState
http://blog.csdn.net/Gykimo/article/details/8901192
GWES //Graphics Windowing and Event Subsystem,即图形窗口和事 件子系统。
2014.4.21
1.
Android中intent传递对象和Bundle的用法
http://blog.csdn.net/lixiang0522/article/details/8642202
Bundle类也实现了Parcelable接口,一般在android中我们是通过Bundle来封装数据并进行传送的。
- WINDOW_SERVICE
WindowManager 管理打开的窗口程序
Creates a new Uri by appending an already-encoded path segment to a base Uri.
int ringtoneID = cursor.getInt(cursor 14 .getColumnIndex(MediaStore.MediaColumns._ID)); 15 mImageUri = Uri.withAppendedPath(mUri, "" 16 + ringtoneID);
- /**
- * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能
- * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作
- * 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作
- */
Iterator<String> iter = keys.iterator() ;
while(iter.hasNext()){
String str = iter.next() ;
System.out.print(str + "、") ;
}
Iterator<String> iter = values.iterator() ;
while(iter.hasNext()){
String str = iter.next() ;
System.out.print(str + "、") ;
}
System.out.println("取出的内容是:" + val) ;
System.out.println("搜索的key存在!") ;
}else{
System.out.println("搜索的key不存在!") ;
}
if(map.containsValue("www.mldn.cn")){ // 判断value是否存在
System.out.println("搜索的value存在!") ;
}else{
System.out.println("搜索的value不存在!") ;
}
UriMatcher 类主要用于匹配Uri.
使用方法如下。
首先第一步,初始化:
- UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
第二步注册需要的Uri:
- matcher.addURI("com.yfz.Lesson", "people", PEOPLE);
- matcher.addURI("com.yfz.Lesson", "person/#", PEOPLE_ID);
第三部,与已经注册的Uri进行匹配:
- Uri uri = Uri.parse("content://" + "com.yfz.Lesson" + "/people");
- int match = matcher.match(uri);
- switch (match)
- {
- case PEOPLE:
- return "vnd.android.cursor.dir/people";
- case PEOPLE_ID:
- return "vnd.android.cursor.item/people";
- default:
- return null;
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
静态方法可以直接通过类名调用,任何的实例也都可以调用,
因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于方法,表示不可覆盖,并且可以通过类名直接访问。
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。
它们只能访问static数据。
它们不能以任何方式引用this 或super