做平面设计去哪个网站找素材好,现在的网站推广是怎么做的,wordpress内容分享微信,百度搜索关键词排名人工优化OPhone平台基于Linux和开放手机联盟#xff08;OHA#xff09;的Android系统#xff0c;经过中国移动的创新研发#xff0c;设计出拥有新颖独特的用户操作界面#xff0c;增强 了浏览器能力和WAP兼容性#xff0c;优化了多媒体领域的OpenCORE、浏览器领域的WebKit等业内众…OPhone平台基于Linux和开放手机联盟OHA的Android系统经过中国移动的创新研发设计出拥有新颖独特的用户操作界面增强 了浏览器能力和WAP兼容性优化了多媒体领域的OpenCORE、浏览器领域的WebKit等业内众多知名引擎增加了包括游戏、Widget、 Java ME等在内的先进平台中间件。本文主要介绍OPhone的架构、应用程序模型和主要开发组件。
OPhone平台的架构 OPhone 平台由底层操作系统、本地系统库、OPhone运行环境、Widget运行环境、应用程序框架和应用程序等部分组成。OPhone平台结构图如图1所示图1 OPhone平台的架构图OPhone平台基于Linux 2.6版内核内核为上层系统提供了安全、内存管理、线程管理、网络协议栈和驱动模型等系统服务。 OPhone 平台强大的功能来源于底层的本地库包括多媒体引擎OpenCORE浏览器引擎WebKit2D图形引擎SGL和关系型数据库SQLite等。这些本 地库通过上层的应用程序框架将编程接口提供给开发者调用本地库和应用程序框架通过JNIJava Native Interface连接。OPhone平台为应用程序提供了一个开放的运行环境无论是内置应用程序还是后续安装的应用程序所有应用程序访问底层框 架的能力是一致的开发者可以使用应用程序框架提供的API开发自己的应用程序。OPhone上的应用程序模型 最新发布的OPhone 1.5平台支持以下三种应用程序本文主要介绍OPhone应用程序模型。使用java语言编写的OPhone应用程序以APK形式发布。使用HTML、JavaScript等脚本语言编写的Widget程序以WGT形式发布。使用java语言编写的MIDlet程序以jar/jad形式发布。 APK文件在Dalvik虚拟机内运行Dalvik虚拟机与普通的Java虚拟机不同它针对嵌入式设备进行了优化class文件也经过 “dx”工具转换成.dex文件格式.dex文件格式更为紧凑执行效率更高。APK应用程序运行时OPhone会启动一个Linux进程应用程序 就运行在自己的进程之中。每一个进程都拥有自己的一个Java虚拟机不同应用程序的代码都是单独运行的不会相互影响。APK是一种与zip文件格式兼容的文件。OPhone SDK提供了aapt工具可以把类文件和资源文件打包成APK文件打包过程包括class文件到dex文件的转换、生成资源表、优化文本格式的XML文件等工作。转换过程如图2所示图2 项目文件到APK文件转换过程主要开发组件 OPhone 应用程序通常由Activity、Content Provider、Service和BroadcastReceiver组成虽然每项并非是必须的但是掌握这些开发组件是学习OPhone应用程序开发首要的任务。下面对OPhone应用程序的主要开发组件逐一介绍。Activity
从表面上讲Activity是OPhone应用程序的一个界面用户可以通过这个界面操作播放器查看联系人或者玩游戏。对开发者而 言Activity是OPhone应用程序的入口OPhone应用程序模型没有定义像main()这样的入口方法而是在Activity类中定义了 一系列的生命周期方法比如onCreate()、onResume()、onStart()、onPause()、onStop()和 onDestroy()OPhone系统会在适当的时候调用对应的生命周期方法。这一点与Java ME平台的MIDlet类似。OPhone 的应用程序模型打破了应用程序之间的边界系统会为每个应用程序维持一个堆栈堆栈中放置 Activity对象应用程序不但可以将APK中定义的Activity放入堆栈还可以将其他应用程序的Activity放入堆栈中。例如可以通过 调用startActivity()方法启动浏览器、拨打电话、浏览图片等。例如从应用程序中调用Phone程序拨打电话的代码如下所示Intent intent new Intent(Intent.ACTION_CALL, Uri.parse(tel:10086));startActivity(intent);这种特性极大的增加了平台组件的复用性你不需要单独开发一个电话程序也没有必要单独开发一个图片浏览程序只需要通过简单的代码调用系统已经提供的Activity即可。Content Provider
Content Provider提供了在不同应用程序间共享数据的机制。在OPhone系统中已经预置了几种Content Provider向开发者提供音频、视频、图片、联系人和呼叫记录等数据。如果这些数据使用数据库接口来存储那么将无法提供给其他的应用程序使用。当 然如果数据只是想在应用程序内部使用就不应该使用Content Provider而使用数据库或者文件等可以获得更高效的读/写操作。在android.provider包内定义了一些类和接口它们主要描述了内置的几个Content Provider的数据结构。例如MediaStore.Audio定义了音频数据的信息CallLog.Calls则定义了通话记录的信息。 ContentProvider类提供了抽象的接口允许应用程序查询插入删除和更新其中的数据。下面的代码可以从系统中查询存储在SD卡上的歌曲 如图3所示view plain copy to clipboard print ? ContentResolver resolver getContentResolver(); //从Content Provider中获得SD卡上的音乐列表 cursor resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null , null , null , MediaStore.Audio.Media.DEFAULT_SORT_ORDER); String[] cols new String[] { MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.ARTIST, }; int [] ids new int [] { R.id.track_name, R.id.artist }; if (cursor ! null ) startManagingCursor(cursor); //创建Adapter并绑定到ListView SimpleCursorAdapter adapter new SimpleCursorAdapter( this , R.layout.songs_list, cursor, cols, ids); setListAdapter(adapter); ContentResolver resolver getContentResolver();
//从Content Provider中获得SD卡上的音乐列表
cursor resolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null, null, null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
String[] cols new String[] { MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.ARTIST, };
int[] ids new int[] { R.id.track_name, R.id.artist };
if (cursor ! null)
startManagingCursor(cursor);
//创建Adapter并绑定到ListView
SimpleCursorAdapter adapter new SimpleCursorAdapter(this,
R.layout.songs_list, cursor, cols, ids);
setListAdapter(adapter); 图3 列举SD卡上的歌曲Service
Service是OPhone平台非常重要的组件之一它运行在后台不与用户进行交互。在默认情况下Service运行在应用程序进程的 主线程之中如果需要在Service中处理一些网络连接等耗时的操作那么应该将这些任务放在单独的线程中处理避免阻塞用户界面。启动后的 Service具有较高的优先级一般情况下系统会保证Service的正常运行。只有当前台的Activity正常运行的资源被Service占用的 情况下系统才会暂时停止Service当系统重新获得了资源后会自动启动原来的Service。如果想使用Service组件需要扩展android.app.Service类并在AndroidManifest.xml文件中使 用service标签声明。与Activity类似Service中同样定义了onCreate()、onStart()和 onDestroy()等生命周期方法。当其他组件通过Context.startService()方法启动Service时系统会创建一个 Service对象并顺序调用onCreate()方法和onStart()方法。在调用Context.stopService()或者 stopSelf()之前Service一直处于运行的状态。如果多次调用startService()方法系统只会多次调用onStart()方 法而不会重复调用onCreate()方法。无论调用了多少次startService()只需要调用一次stopService()就可以停止 Service。Service对象在销毁之前onDestroy()会被调用因此与资源释放相关的工作应该在此方法中完成。BroadcastReceiver
应用程序的运行环境不是一成不变的SD卡插拔、电池电量低等事件会影响应用程序的运行。为了能够做出正确的响应应用程序必须能够监听此类事 件并做出正确的处理。在OPhone系统中BroadcastReceiver就是我们需要的那个组件。BroadcastReceiver没有界面显 示但是它却可以通过AndroidManifest.xml或者在代码中进行注册以监听应用程序感兴趣的事件。BroadcastReceiver是 一个抽象类定义了一个抽象方法onReceive()当广播事件到来时BroadcastReceiver的onReceive()方法会被调用 开发者只需要自己实现此方法即可。void onReceive(Context curContext, Intent broadcastMsg)使用BroadcastReceiver可以方便的实现开机自启动应用程序OPhone系统启动后会广播 Intent.ACTION_BOOT_COMPLETED事件因此只需要在程序中定义一个BroadcastReceiver并在 AndroidManifest.xml中进行注册。view plain copy to clipboard print ? receiver android:name .BootReceiver intent-filter action android:nameandroid.intent.action.BOOT_COMPLETED / /intent-filter /receiver receiver android:name.BootReceiver
intent-filter
action android:nameandroid.intent.action.BOOT_COMPLETED /
/intent-filter
/receiver
除此之外还需要在AndroidManifest.xml中增加权限声明如果不声明应用程序所需要的权限那么在运行时会抛出安全异常。view plain copy to clipboard print ? uses-permission android:name android.permission.RECEIVE_BOOT_COMPLETED / uses-permission android:nameandroid.permission.RECEIVE_BOOT_COMPLETED/ 最后只需要实现一个BroadcastReceiver即可代码如下所示view plain copy to clipboard print ? public class BootReceiver extends BroadcastReceiver { Override public void onReceive(Context arg0, Intent arg1) { if (arg1.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { Intent intent new Intent(arg0, com.ophone.MusicActivity. class ); //在Activity之外调用startActivity() intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); arg0.startActivity(intent); } } } public class BootReceiver extends BroadcastReceiver {
Override
public void onReceive(Context arg0, Intent arg1) {
if (arg1.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent intent new Intent(arg0, com.ophone.MusicActivity.class);
//在Activity之外调用startActivity()
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
arg0.startActivity(intent);
}
}
}
更多内容欢迎大家访问OPhone开发者社区www.ophonesdn.com 。作者介绍 詹建飞中国移动通信研究院终端技术研究所项目经理。6年java编程经验熟悉Java MESymbianOPhone/Android等多种移动开发平台具有丰富的客户端软件开发和设计经验。先后出版了《J2ME开发精解》、 《Java ME核心技术与最佳实践》和《OPhone应用开发权威指南》等书籍2007年荣获电子工业出版社优秀作者奖。