Android SDK 开发之应用程序基础
2010-03-23 04:53:00 来源:WEB开发网所有的component都在一个进程中的主线程中初始化,对component的系统调用是由该线程调度的。对每一个实例有不同的线程。因此,实例方法 — 例如View.onKeyDown()这样的报告用户动作和生命周期通知的方法 — 永远在主线程中运行。这意味着component不应该做耗时的和阻塞的操作,而是应该创建其它的线程来做。
Android可以决定在资源不足时关闭一个进程。在进程内运行的应用程序的component随之关闭。当有事情要做时,一个进程又会启动。
Android在决定关闭哪个程序时会计算它们对用户的相对重要性。例如,不可见的程序比可见的重要性低。因此是否关闭一个进程的决定取决于component的状态,下一节我们讨论之。
Threads
即时你可以将应用程序限制在一个单个进程中,有可能你也需要启动一个线程来做一些后台工作。由于用户界面需要永远快速响应,负责activity的线程不应做耗时多的工作。这些工作应该放在另一个线程中做。
线程使用Java Thread对象在代码中创建。Android提供了一些类来方便管理线程 — Looper用来在线程中运行一个消息循环,Handler用来处理消息,HandlerThread用来在消息循环中设置一个线程。
Remote procedure calls
Android 有一个轻量级的RPC机制。在这里一个方法在本地调用,但在远程执行(在另一个进程中),再将结果返回给调用者。这要求将方法调用和它的数据分解到操作系统可以理解的级别,将其从本地进程和地址空间转移到远程进程和地址空寂那,然后重新组织和调用。返回值必须从相反的方向传送。Android提供了做这些事情的代码,所以你可以集中精力来定义和实现RPC接口本身。
一个RPC接口可以只包含方法。所有的方法都是同步运行(本地方法阻塞直到远程方法完成),即使没有返回值。简而言之,该机制如下:首先使用IDL(interface definition language)定义一个RPC接口。aidl工具从这个声明来生成一个Java接口定义,该定义对本地和远程进程都有效。它包含两个内部类,如下图所示:
内部类具有管理在IDL中定义的rpc接口的代码。两个内部类均实现IBinder接口。其中一个是系统本地内部调用的,另外一个成为Stub的扩展了Binder类。除了IPC调用的内部代码外,它还包含RPC接口的声明。你需要继承Stub来实现这些方法,如图所示。
更多精彩
赞助商链接