Browsed by
Category: 杂文

随便记点什么

Android开发指导随译(2) — 应用程序基本原理(4)

Android开发指导随译(2) — 应用程序基本原理(4)

激活组件: Intents(意图)

CP收到CR的请求时就可以激活. 其他三个组件: 行为, 服务以及BR都是通过异步消息激活, 这种消息就是”intent(意图)”.

关闭组件

CP只在相应CR请求时存活, BR只在响应广播消息时存活, 因此对它们而言没有必要显式地关闭这些组件.

另一方面, Activities提供了用户界面. 它们与用户可能会有一个长期的会话过程, 会话期间即使是空闲也仍然保持激活. 类似的, 服务也可能保持运行很长一段时间. 因此Android提供方法有持续地关闭Activity和服务.

1. 可以调用Activity的finish()方法关闭Activity. 一个activity可以关闭另外一个activity.
2. 服务可以通过调用stopSelf()的方式来关闭自己, 或者调用Context.stopService()来关闭.

如果不再使用组件了, 系统也可以关闭它们, 或者当Android必须回收内存时也会关闭这些组件.

manifest文件 (?运货单文件)
Android启动一个程序组件之前, 需要知道这个组件的存在. 因此应用程序需要在一个manifest文件中声明它们的组件. manifest文件打包在.apk文件中, 该文件(.apk)还包含程序代码, 文件以及资源等.

manifest文件是一个结构化的xml文件, 并且总是命名为”AndroidManifest.xml”. 它最主要的任务就是将当前应用程序的组件情况告诉Android系统.

Intent过滤
Intent对象可以显式地命名为一个目标组件(Target Component), 此时Android可以通过manifest文件对它进行操作. 但是如果目标没有显式命名, Android就必须要查找最合适的组件来响应Intent, 方法就是将Intent对象与潜在目标的Intent filters(Intnet过滤)进行比较.

感谢iNove

感谢iNove

非常不错的中文模板.

其实WordExpress 3.0的缺省模板也挺好, 不过字体, 段间距, 行间距实在太大, 我也不想在这方面花太多时间去调整. 而iNove做得确实不错, 我尤其喜欢它的menu设计.

如果说iNove的缺点话, 我只是觉得抬头的黑色部分太沉重了, 换成WordExpress的缺省抬头部分可能效果会不错.

1+1>2?

1+1>2?

强强联手是否会营造更好的结果? 在IT领域, 这方面成功的例子可能不太多.
Intel和HP当年打造的安腾, 现在就没什么消息了. 两个巨无霸联手, 大家都心怀鬼胎, 要齐心协力去干一件事, 还真不容易. Wintel联盟之所以成功, 是因为他们从小就混在一起. 现在大家翅膀都硬了, 这不又开始各打小算盘了么.
看看MeeGo, 不禁又开始担心了. 这次又是两个巨无霸的合作啊.

微软也准备推网络广告联盟了

微软也准备推网络广告联盟了

http://advertising.microsoft.com/

以前申请过Google Adsense,后来莫名其妙地被封掉了。据说很难和GG沟通,因此就干脆放弃了。

如果微软也准备推这个东西,倒是可以做一下尝试。

Android开发指导随译(2) — 应用程序基本原理(3)

Android开发指导随译(2) — 应用程序基本原理(3)

Service(服务)

服务没有可视界面, 而是在后台运行不确定的时间. 例如, 一个服务可以播放背景音乐, 或者从网络中获取数据, 或者做一些计算,等等.

每个服务都是从Service基类扩展(笔注: extend? or 派生?).

典型的应用例子是媒体播放. 如果媒体播放行为退出后, 仍然希望能继续播放音乐, 媒体播放行为应启动一个服务在后台运行. 系统将保持音乐播放服务, 即使启动它的行为已经离开了当前屏幕.

可以连接已经运行的服务, 或者启动尚未运行的服务. 连接完成后, 可以通过服务提供的接口与服务进行通信. 对音乐服务而言, 它提供的接口可以允许用户暂停, 倒回, 体制或者重新播放音乐.

与行为和其他组件一样, 服务运行在应用程序进程的主线程, 所以它们不会阻塞其他组件或者用户界面. (笔注: 这里的意思应该是指服务是在一个独立的线程中运行, 不会干扰其他线程吧??)

Broadcast receivers(广播接收者,BR)

BR只接收和响应广播通知, 不做其他任何事情. 有些广播是由系统发起的, 例如时区改变, 电池电量不足, 用户改变了界面语言等. 应用程序也能发起广播, 例如通知其他应用程序某些数据已经下载到设备,并且可以使用了.

应用程序可以由任意数目的BR来响应它认为重要的任何通知. 所有的接收者都是扩展自BroadcastReceiver基类.

BR也不显示用户界面. 然而, 它们可以启动一个行为来响应它们接收到的信息, 或者使用NotificationManager通知用户.

Content providers (内容提供者, CP)

CP可以使一系列的应用程序数据能够被其他应用程序使用.

CP扩展自ContentProvider基类, 实现了一系列标准的方法供其他程序获取,存储它所控制的数据类型. 然而, 应用程序不是直接调用这些方法, 而是使用ContentResolver(CR)对象并调用它的方法. 一个CR可以与任何CP通话. CR和CP共同管理着跨进程通信.

附注, 我开始使用缩写语了, 玷污了中文环境, 我很惭愧……

Android开发指导随译(2) — 应用程序基本原理(2) Activity(行为)

Android开发指导随译(2) — 应用程序基本原理(2) Activity(行为)

一个Activity(行为)代表了一个可视的用户交互接口. 例如, 一个文本消息程序可能会有一个Activity(行为)用于显示联系人列表, 第二个行为用于给选定的联系人写文本信息, 另外一个行为用于显示以前的信息或者改变设置. 它们共同工作提供了一个聚合的用户界面.

每个行为与其他行为都是独立的, 它们都是从Activity基类派生而来.

每个应用程序可以由一个或者多个行为构成. 通常在应用程序启动时, 会将其中一个行为设置为首先呈现给用户的行为. 当前行为可以启动下一个行为来实现行为的跳转.

每个行为都有一个缺省的窗体. 一般而言, 窗体总是填满整个屏幕的, 但是也可以比当前屏幕小些并且浮在其他窗体之上. 行为也可以使用附加的窗体,例如对话框等.

窗体的可视内容由View(视图)来提供, 所有的view都是从view基类派生. 每个view控制窗体的一部分区域. 父View包含和组织子view的布局. 叶子view(处在派生关系的底部)绘制它们控制的区域, 并响应用户在这部分区域的动作.

Android预置了一些view, 例如按钮, 文本框, 滚动条等. (笔注: 在windows编程中, 这些反而是窗体吧)

行为的窗体可以通过Activity.setContentView()方法设置view的层级关系, Content View(内容View)是这种层级关系中的根节点. (?)

一个非常好的笔记软件:EverNote

一个非常好的笔记软件:EverNote

官方网站:http://www.evernote.com/ 而且是免费的!

基本上这是我一直想要的软件,将笔记同步到server上,随时随地都可以进行编辑,可以在各计算机之间共享等等。

当初,我就特别喜欢Google documents,曾经希望能把大部分文档,资料都迁移到Google documents上去,费了老半天劲,刚觉得开心起来,Google documents就被和谐了,后来虽然开放了一些,但也时不时会断掉,非常不爽。

基本上我对EverNote是垂涎三尺的,可是有了Google documents的前车之鉴,我现在还是老老实实地用wordpress记录吧。

写这个blog的意思是做个mark,也许未来神奇的国度里不再发生神奇的事情后,我还能尝试一下。

WordPress技巧

WordPress技巧

从网上遛狗遛出来的, 以后可能用得着:

禁用WordPress文章历史修订版本(Revisions)

在wp-config.php中的代码require_once(ABSPATH . 'wp-settings.php');前增加以下代码:define('WP_POST_REVISIONS',false);即 可;

清理数据库中以前的文章历史修订版本

另外你也可以通过phpmyadmin定期清理和删除数据库中的冗余文章修订版本,清理以前的文章修订版本也一样。数据库操作前最好先进行备份。在 phpmyadmin 中进行数据库管理,SQL语句命令行中写入以下运行代码执行(若你设置了数据库表名的前缀,需要将数据表名称中wp改成你的前缀):

delete from wp_posts where post_type=’revision’;

另外还可以再用SQL语句:

DELETE FROM wp_postmeta WHERE meta_key= ‘_edit_lock’;

DELETE FROM wp_postmeta WHERE meta_key =’_edit_last’;

删除数据库中文章特殊数据表wp_postmeta中meta_key字段为_edit_lock(代表上次修改post的修改时间)和 _edit_last(指最后一次编辑时间)的数据,然后全选所有表,下拉列表中选择使用phpmyadmin“优化表”功能。

Android开发指导随译(2) — 应用程序基本原理(1)

Android开发指导随译(2) — 应用程序基本原理(1)

Android程序采用Java语音编写. 编译后的Java代码(包括资源文件和数据文件等)打包进一个Android package,以.apk为文件后缀. 一个.apk文件就是一个应用程序.

从各方面看, 每个Android应用程序都有”自己独立的世界”:
1. 缺省情况下, 每个应用程序都运行自己的linux进程.
2. 每个进程都有自己独立的VM, 因此应用程序之间是隔离的.
3. 缺省情况下, 每个程序都分配了一个唯一的linux user ID. 只有当前程序和当前用户(user)有权访问该程序的文件(?数据).

有可能两个程序共享同一个user ID, 这样他们就能互相看见对方的文件. 为了共享系统资源, 应用程序也可以采用同一个ID, 运行在同一个Linux进程中, 公用同一个VM.

应用程序组件
Android一个重要的特点就是: 应用程序可以使用其他应用程序的elements(?组件)(这些应用程序要开放这些elements).
程序不需要合并其他程序的代码或者将它们链接进来, 只需要根据需要启动其他程序的那部分代码即可. (笔注: 这个强啊! 是不是我理解错了? 直接启动其他程序的部分代码?)

为了支持上述特点, 需要利用应用程序任何一部分时, Android必须能够启动该应用程序, 并且实例化那一部分的Java对象. 因此, 与大多数其他系统应用程序不同, Android应用程序没有一个单独的程序入口(例如, 没有main()函数). 可以说, 应用程序由一些必要的components(组件)构成, 系统可以根据需要实例化并且运行这些组件.

有四类组件:

1. Activities (行为?)
2. Services (服务)
3. Broadcast receivers(广播接收者)
4. Content providers(内容提供者)

Android开发指导随译(1)

Android开发指导随译(1)

基于http://androidappdocs.appspot.com/guide/basics/what-is-android.html的翻译稿.

随译的意思是指: 随手进行的翻译. 因此语法未必严格, 内容不仅不和原稿严格匹配, 而且会有删减(只保留我感兴趣的东西).

什么是Android?
Android是一套为移动设备定制的软件套件. 它包括:一个操作系统, 中间件以及关键应用程序.
Android SDK提供了为Android平台开发应用所必须的工具和API集.
Android SDK采用Java编程语言.

Android包括以下关键特性:
1. 程序框架
2. Dalvik虚拟机(针对移动设备进行了优化)
3. 集成的浏览器(基于WebKit)
4. 优化后的图形库(2D, 3D)
5. SQLite (数据存储)
6. 多媒体支持(语音, 视频, 以及多种图像格式等,MPEG4,H264等)
7. GSM 电话技术(依赖硬件支持)
8. 蓝牙, EDGE, 3G以及WiFi(依赖硬件支持)
9. 摄像头, GPS, 指南针, 加速器(?是指重力感应吗)
10. 丰富的开发环境, 包括模拟器, 调试工具,性能优化以及基于Eclipse IDE的PlugIn.

Android架构
Android分成四层:
1. 应用程序层. 所有的应用程序都用Java语言进行编写.
2. 程序框架层.
3. 库以及Runtime;
4. Linux核心.

笔注: 应用层用Java编写, 库以及runtime是采用C/C++编写, 是谁来完成Java对C/C++的封装,供上层应用调用? JNI?

程序框架
程序框架包含一系列的功能(管理)集, 例如Windows的管理, View管理, 位置管理等, 有两个Manager需要注意:
1. Content Providers(内容提供)
它使应用程序能访问其他程序的数据, 或者共享它们自己的数据(给其他程序)

2. Activity Manager(生命周期管理)
管理程序的生命周期, 同时也提供一个通用的”navigation backstack”(这是什么? 历史堆栈的回顾?)


媒体库基于PacketVideo的OpenCORE库;
SQLite提供关系数据的存储;

Android runtime
每一个Android应用程序都有自己独立的进程, 并且有一个独立的Dalvik虚拟机实例.
Dalvik允许设备中run多个VM实例. Dalvik VM采用Dlavik Executable(.dex)格式运行执行文件.