在Android 系统中,每一个应用程序,也称为活动,被赋予了唯一的用户ID而在自己的进程中运行。系统本身,或者叫活动管理器,来
维护应用程序的周期和一个公用的活动栈。
每一个应用程序的生命周期有3个阶段,活动或者运行,暂停 和 停止。AIR的应用程序和其他的应用程序是一样的。因为应用程序有一个
有限的周期,所以他可以存储数据。Android 提供了sqlite 数据库,或者是内部状态,是一些简单 的name/value 键值对。
AIR 使用自己的API来保存数据。AIR有自己的Sqllite 引擎,和文件系统的权限。也提供了Local shared object ,一个像cookies 的解决方案。
这一讲中,将讲述这些概念。
AIR 应用程序
NativeApplication 代表了你的AIR应用程序。他在flash.desktop.pakage 中,继承自EventDispatcher。他采用单例模式,在程序加载后被自动
创建。你可以用静态方法 NativeApplication.nativeApplication获取一个引用的实例.
他还可以触发应用程序类型的事件,比不invoke和exiting 以及一些应用程序的特殊属性,比如icon 和 systemIdleMode.有些属性是为
AIR 的桌面程序创建的,不提供在移动应用程序中,比如:activewindow 或者是opendwindows,因为移动设备中没有多个窗口。
应用程序的打开
在点击图标后,你的程序开始运行,而当前运行的程序被移动到后台运行。AIR开发的应用程序与其他程序之间的导航是相同的,可以
可以任意切换。
Android 没有提供应用程序的启动界面。所以程序的启动时一个黑色的背景。测试你的应用程序,如果启动的时间很长,你必须重写
你的启动模块。有一个变通,你的根应用程序必须是一个简单的加载indicator 图片。程序加载是,注册ADDED_TO_STATE 事件,使用loader 记载你自己的
Application 。
程序默认是没有全屏显示的,你可以通过设置应用程序配置 来使之全屏显示<fullScreen>true</fullScreen>。
应用程序的关闭
当其他程序被选择,AIR 程序其实是在后台运行,而不是关闭。对于AIR ,NativeApplication 将会触发exiting 事件和closing 事件。你可以注册该事件,一遍在应用程序关闭的时候做一些自己的工作。
import flash.desktop.NativeApplication;
import flash.events.Event;
NativeApplication.nativeApplication.dispatchEvent(Event.EXITING.onExit);
function onExit(event:Event):void
{
//save application's current state
}
在android 中,【Settings】|【Aplications】|【Manager applications】 强制关闭应用程序,在AIR中可以是使用一下代码强制关闭应用程序
NativeApplication.nativeApplication.exit();
后天运行与前台运行
当应用程序转到前天或者后台运行,NativeApplication 都会触发事件。如下:
NativeApplication.nativeApplication.addEventListerner(Event.ACTIVATE,onActivate);
NativaApplication.nativeApplication.addEventListerner(Event.DEACTIVATE,onDeactivate);
在Flash Player 10.1 中 和AIR2.0 中,为了考虑到内存和电池的使用寿命,做了部分改进。当应用程序在不在激活状态,程序将进入到睡眠模式,停止rendering 和 刷新的频率降低到4fpps。为什么是使用4,这个数字是socket 连接必须的。如果你的AIR 程序不需要持久的socket连接,你可以将这个值设为0。
stage.frameRate=0;
有些是需要保持的状态,如视屏。这个示例展示了怎么样play和暂停正在播放的视屏。
import falsh.desktop.NatvieaApplication;
import flash.events.Event;
import flash.media.Video;
import flash.media.NetConnection;
import flash.media.NetStream;
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE,onActivate);
NativeApplication.nativeApplication.aadEventListener(Event.DEACTIVATE,onDeActivate);
var video:Video=new Video(640,270);
var nc:NetConnection=new NetConnection();
nc.connect(null);
var ns:NetStream=new NetStream(nc);
video.attachNetStream(ns);
ns.play("youmoive.mp4");
public function onDeActivate(event:Event):void
{
ns.pause();
}
public function onActivate(event:Event):void
{
ns.play()
}
当有电话打进来的时候,在通话过程中也播放视屏是一个很差的用户体验。添加READ_PHONE_STATE 权限到应用程序配置文件。这样的话,AIR 在打电话过程将会关闭声音。
<user-permission android:name="android.permission.READ_PHONE_STATE "?>
在应用程序返回是,使用system.gc 方法。
菜单,返回,搜索按钮
有一些按钮别用于系统的导航与搜索。除过Home 按钮,其它的你可以自定义他们的事件在AIR程序中。
注册keyboardEvent.KEY_DOWN 事件,通过keycode 识别按下的那个健,使用event.preventDefault() 阻止该事件,然后使用自定义的行为。
package
{
import flash.desktop.NativeApplication;
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageAlign;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
// replace Sprite for MovieClip if using Flash Professional
public class AirApplication extends Sprite
{
public function AirApplication()
{
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, onActivate);
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, onDeactivate);
}
private function onKey(event:KeyboardEvent):void {
switch(event.keyCode) {
case Keyboard.BACK :
event.preventDefault();
trace("back");
// go back within AIR application
break;
case Keyboard.MENU :
event.preventDefault();
trace("menu");
// display custom menu
break;
case Keyboard.SEARCH :
event.preventDefault();
trace("search");
// use as a help button or debug tool
break;
}
}
private function onActivate(event:Event):void {
stage.frameRate = 24;
trace("application in foreground");
}
private function onDeactivate(event:Event):void {
stage.frameRate = 4;
trace("application in background");
// to shut-down application, uncomment following line
// NativeApplication.nativeApplication.exit();
}
}
}
在移动设备上保存数据
保存数据时应用程序必备的功能,如程序在后天运行,或者被关闭后,保存程序配置信息等。
内部与外部存储
以下列出一些目录:
内部的一些存储:File.ApplicationDirectory ,是应用程序的安装目录,在这个目录是只读的。
File.ApplicationStorageDirectory 是应用程序的存储目录,使用这个目录可以保存大量的数据,和用户设置等。如果应用程序被删除的话,这个目录也会被删除。
外部的一些存储:
File.documentsDirectory ,File.userDirectory,File.desktopDirectory 等。可以保存大的数据,如图片,视屏,和临时文件。访问这些文件的全选是:
<uses-permision android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>,在使用之前,确认是否有sd卡:
If(File.userDirectory==true)
//proceed with saving data
一下变量所指的目录:
App:/
File.applicationDirectory
/data/data/app.appId/app/assets
|app-storage:/
/data/data/app.appID/appID/Local Store
|File.applicationStorageDirectory
/data/data/app.appID/appID/LOcal Store
|File.documentsDirectory
File.userDierecory
File.desktopDirectory
/sdcard
|File.createTempDirectory()
File.createTempFile()
/data/data/app.appId/cache