android 学习

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下进程间通信的几种主要手段简介:

  1. 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;
  2. 信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身;linux除了支持Unix早期信号语义函数sigal外,还支持语义符合Posix.1标准的信号函数sigaction(实际上,该函数是基于BSD的,BSD为了实现可靠信号机制,又能够统一对外接口,用sigacti



  1. on函数重新实现了signal函数);
  2. 报文(Message)队列(消息队列):消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
  3. 共享内存:使得多个进程可以访问同一块内存空间,是最快的可用IPC形式。是针对其他通信机制运行效率较低而设计的。往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。
  4. 信号量(semaphore):主要作为进程间以及同一进程不同线程之间的同步手段。
  5. 套接口(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来封装数据并进行传送的。

2 intent ,传递数据,跳转。
http://www.cnblogs.com/feisky/archive/2010/01/16/1649081.html
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

3. android中getSystemService详解
http://blog.sina.com.cn/s/blog_49b531af0102e9bt.html
 getSystemService是Android很重要的一个API,它是Activity的一个方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。以下介绍系统相应的服务。

                 传入的Name                |                返回的对象                     |             说明
  • WINDOW_SERVICE                      WindowManager                    管理打开的窗口程序

2014.4.22
1. SQLite ,android 数据库。
http://blog.csdn.net/ruanjianxiong/article/details/7565092
Android中的URI即通用资源标识符,Universal Resource Identifier, 简称URI。 Uri代表要操作的数据,Android上可用的每种资源 -包括 图像、视频片段、音频资源等都可以用Uri来表示。 
3.withAppendedPath 用法
public static Uri withAppendedPath (Uri baseUri, String pathSegment)
Added in  API level 1

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);

http://byandby.iteye.com/blog/835580
DatabaseHelper 是一个辅助类,
  1. /** 
  2.  * SQLiteOpenHelper是一个辅助类,用来管理数据库的创建和版本他,它提供两个方面的功能 
  3.  * 第一,getReadableDatabase()、getWritableDatabase()可以获得SQLiteDatabase对象,通过该对象可以对数据库进行操作 
  4.  * 第二,提供了onCreate()、onUpgrade()两个回调函数,允许我们再创建和升级数据库时,进行自己的操作 
  5.  */  

3.2

SyncStateContentProviderHelper创建的数据库,主要创建_sync_state_sync_state_metadata表,主要用于同步时,状态的记录。
4.HashMap 用法
http://haiyuanxi.blog.51cto.com/4230602/945292
Map<String,String> map = new HashMap<String,String>() ;
 map.put("mldn","www.mldn.cn") ;  // 增加内容 

 Set<String> keys = map.keySet() ;  // 得到全部的key 
    
Iterator<String> iter = keys.iterator() ; 
    while(iter.hasNext()){ 
      String str = iter.next() ; 
      System.out.print(str + "、") ; 
    } 

 Collection<String> values = map.values() ;  // 得到全部的value 
    
Iterator<String> iter = values.iterator() ; 
    while(iter.hasNext()){ 
      String str = iter.next() ; 
      System.out.print(str + "、") ; 
    } 

 String val = map.get("mldn") ;  // 根据key取出值 
    System.out.println("取出的内容是:" + val) ; 

 if(map.containsKey("mldn")){  // 判断key是否存在 
      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不存在!") ; 
    } 

5.UriMatcher

UriMatcher 类主要用于匹配Uri.

使用方法如下。

首先第一步,初始化:

[java]  view plain copy print ?
  1. UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);  

第二步注册需要的Uri:

[java]  view plain copy print ?
  1. matcher.addURI("com.yfz.Lesson""people", PEOPLE);  
  2. matcher.addURI("com.yfz.Lesson""person/#", PEOPLE_ID); 

第三部,与已经注册的Uri进行匹配:

[java]  view plain copy print ?
  1. Uri uri = Uri.parse("content://" + "com.yfz.Lesson" + "/people");  
  2. int match = matcher.match(uri);  
  3.        switch (match)  
  4.        {  
  5.            case PEOPLE:  
  6.                return "vnd.android.cursor.dir/people";  
  7.            case PEOPLE_ID:  
  8.                return "vnd.android.cursor.item/people";  
  9.            default:  
  10.                return null;  
  11.   

6. static 用法
<1>类名.静态变量名

用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块(用处非常大,呵呵)。
<2>静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
<3>静态方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,
因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
<4>static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
<5>static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。
它们仅能调用其他的static 方法。
它们只能访问static数据。
它们不能以任何方式引用this 或super
<6>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值