• Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据


    在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

  • 相关阅读:
    js中map和普通对象性能差距有多大?
    谈一谈在css中的wrapper
    react-loadable简单实现
    setstate源码分析
    react setstate()的秘密
    java io学习笔记二
    java8下 枚举 通用方法
    SLF4J、Log4J使用记录
    ByteBuffer flip描述
    unique within an element
  • 原文地址:https://www.cnblogs.com/csharponworking/p/2116058.html
Copyright © 2020-2023  润新知