在Hello Bada!中演示了如何创建一个简单的Form项目,简单的UI中按下按钮显示Hello及弹出对话框。
今天以此项目为基础,来详细讲解一下Bada项目最基本的知识。
一、Bada系统的架构
从Bada文档中祭出架构图:
先来简单分析一下这四层架构。
最底层是Kernel层,Bada同Android等一样,也是基于linux系统的,所以它的系统kernel就是linux 的kernel。官网上强调它是实时的系统。
底层的上一层是Device层,负责内存、IO管理,安全管理,图形窗口和事件管理,数据协议、移动通信,音频视频等多媒体管理。这是很重要的一层。
再上一层是Service层,主要是应用程序引擎,比如联系人和信息组件,与bada服务交互组件。
最上层为Franmework层,我们应用开发都要在此层做了。它提供基础api,UI和图形api等。
大家再来看看下图。
这幅图就是大名鼎鼎的Android架构图,可惜不知为何在Android开发网上找不到了。
对比两副图我们会发现,底层是一样的,都是linux kernel。
而我觉得Bada的framework层=Android的framework层+libraries层。因为Bada的开发语言是C++,可以直接调用系统提供的库,而Android用java封装好api,用这些api来调用
那些库函数。
二、应用的生命周期
在Android中,应用程序的生命周期是与Activity紧密相关的,而在Bada,机制是不同的。
还是先看图再说。
应用程序会经历四个重要的状态:应用程序初始化、在前台、在后台、结束。
对应在程序中:
bool Helloworld::OnAppInitializing(AppRegistry& appRegistry) { // TODO: // Initialize UI resources and application specific data. // The application's permanent data and context can be obtained from the appRegistry. // // If this method is successful, return true; otherwise, return false. // If this method returns false, the application will be terminated. // Uncomment the following statement to listen to the screen on/off events. //PowerManager::SetScreenEventListener(*this); // Create a form HelloworldForm *pHelloworldForm = new HelloworldForm(); pHelloworldForm->Initialize(); // Add the form to the frame Frame *pFrame = GetAppFrame()->GetFrame(); pFrame->AddControl(*pHelloworldForm); // Set the current form pFrame->SetCurrentForm(*pHelloworldForm); // Draw and Show the form pHelloworldForm->Draw(); pHelloworldForm->Show(); return true; } bool Helloworld::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination) { // TODO: // Deallocate resources allocated by this application for termination. // The application's permanent data and context can be saved via appRegistry. return true; } void Helloworld::OnForeground(void) { // TODO: // Start or resume drawing when the application is moved to the foreground. } void Helloworld::OnBackground(void) { // TODO: // Stop drawing when the application is moved to the background. }可以看到,前台和后台的管理是在应用程序级别来控制的。而Bada中的Form只有初始化和结束两种状态,如下:
result HelloworldForm::OnInitializing(void) { result r = E_SUCCESS; // TODO: Add your initialization code here // Get a button via resource ID __pButtonOk = static_cast<Button *>(GetControl(L"IDC_BUTTON_OK")); if (__pButtonOk != null) { __pButtonOk->AddTouchEventListener(*this); __pButtonOk->SetActionId(ID_BUTTON_OK); __pButtonOk->AddActionEventListener(*this); } //Get a label __pLabel = static_cast<Label *>(GetControl(L"IDC_LABEL1")); return r; } result HelloworldForm::OnTerminating(void) { result r = E_SUCCESS; // TODO: Add your termination code here return r; }