# [**Application Management應用管理**](http://docs.nativescript.org/core-concepts/application-lifecycle#application-management)
The `application` module lets you manage the life cycle of your NativeScript apps from starting the application to storing user-defined settings.
`application`模塊允許你從啟動應用到保存用戶自定義設置整個過程進行生命周期管理。
* [Start Application啟動應用](http://docs.nativescript.org/core-concepts/application-lifecycle#start-application)
* [Use Application Events使用應用行為](http://docs.nativescript.org/core-concepts/application-lifecycle#use-application-events)
* [Android Activity Events安卓活動行為](http://docs.nativescript.org/core-concepts/application-lifecycle#android-activity-events)
* [iOS UIApplicationDelegate](http://docs.nativescript.org/core-concepts/application-lifecycle#ios-uiapplicationdelegate)
* [Persist and Restore Application Settings](http://docs.nativescript.org/core-concepts/application-lifecycle#persist-and-restore-application-settings)
## [**啟動應用**](http://docs.nativescript.org/core-concepts/application-lifecycle#start-application)
該方法僅適用于IOS應用。
\(_**這里有問題,app.js里靠這個方法實現主入口文件,也就是主界面定位**_\)
**IMPORTANT:** You must call the `start` method of the application module **after** the module initialization. Any code after the `start` call will not be executed.
> ### 重要:
>
> 你必須在 **application** 模塊加載后才能調用 `start` 方法。 `start` 方法調用之后的任何代碼都不會被執行。
> ### 示例
>
> `/* iOS calls UIApplication and triggers the application main event loop. */ `
>
> `var application = require("application"); `
>
> `application.start({ moduleName: "main-page" }); `
## [**Use Application Events使用**](http://docs.nativescript.org/core-concepts/application-lifecycle#use-application-events) [**Application事件**](http://docs.nativescript.org/core-concepts/application-lifecycle#use-application-events)
NativeScript 應用有以下生命周期事件:
* `launch`: 此事件是在應用程序啟動時引發的。
* `suspend`: 此事件是在應用程序暫停時引發的。
* `resume`: 此事件是在應用程序被暫停后恢復時引發的。
* `exit`: 此事件是在應用程序將要退出時引發的。
* `lowMemory`: 當目標設備上的內存較低時,引發此事件。
* `uncaughtError`: 當捕獲應用程序一個錯誤時, 引發此事件。
> ### 示例
>
> `var application = require("application"); `
>
> `application.on(application.launchEvent, function (args) { `
>
> ` if (args.android) { `
>
> ` // For Android applications, args.android is an android.content.Intent class. `
>
> ` console.log("Launched Android application with the following intent: " + args.android + "."); `
>
> ` } else if (args.ios !== undefined) { `
>
> ` // For iOS applications, args.ios is NSDictionary (launchOptions). `
>
> ` console.log("Launched iOS application with options: " + args.ios); `
>
> ` } `
>
> `}); `
>
> `application.on(application.suspendEvent, function (args) { `
>
> ` if (args.android) { `
>
> ` // For Android applications, args.android is an android activity class. `
>
> ` console.log("Activity: " + args.android); `
>
> ` } else if (args.ios) { `
>
> ` // For iOS applications, args.ios is UIApplication. `
>
> ` console.log("UIApplication: " + args.ios); `
>
> ` } `
>
> `}); `
>
> `application.on(application.resumeEvent, function (args) { `
>
> ` if (args.android) { `
>
> ` // For Android applications, args.android is an android activity class. `
>
> ` console.log("Activity: " + args.android); `
>
> ` } else if (args.ios) { `
>
> ` // For iOS applications, args.ios is UIApplication. `
>
> ` console.log("UIApplication: " + args.ios); `
>
> ` } `
>
> `}); `
>
> `application.on(application.exitEvent, function (args) { `
>
> ` if (args.android) { `
>
> ` // For Android applications, args.android is an android activity class. `
>
> ` console.log("Activity: " + args.android); `
>
> ` } else if (args.ios) { `
>
> ` // For iOS applications, args.ios is UIApplication. `
>
> ` console.log("UIApplication: " + args.ios); `
>
> ` } `
>
> `}); `
>
> `application.on(application.lowMemoryEvent, function (args) { `
>
> ` if (args.android) { `
>
> ` // For Android applications, args.android is an android activity class. `
>
> ` console.log("Activity: " + args.android); `
>
> ` } else if (args.ios) { `
>
> ` // For iOS applications, args.ios is UIApplication. `
>
> ` console.log("UIApplication: " + args.ios); `
>
> ` } `
>
> `}); `
>
> `application.on(application.uncaughtErrorEvent, function (args) { `
>
> ` if (args.android) { `
>
> ` // For Android applications, args.android is an NativeScriptError. `
>
> ` console.log("NativeScriptError: " + args.android); `
>
> ` } else if (args.ios) { `
>
> ` // For iOS applications, args.ios is NativeScriptError. `
>
> ` console.log("NativeScriptError: " + args.ios); `
>
> ` } `
>
> `}); `
>
> `application.start({ moduleName: "main-page" }); `
## [**Android 活動事件**](http://docs.nativescript.org/core-concepts/application-lifecycle#android-activity-events)
NativeScript 應用程序具有以下特定于安卓的行為事件:
* `activityCreated`: 當行為創建時引發該事件。
* `activityDestroyed`: 當行為銷毀時引發該事件。
* `activityStarted`: 當行為開始時引發該事件。
* `activityPaused`: 當行為暫停時引發該事件。
* `activityResumed`: 當行為恢復時引發該事件。
* `activityStopped`: 當行為停止時引發該事件。
* `saveActivityState`:該事件在進程被kill之前引發來恢復每個實例的狀態,所以state是可以恢復的。
* `activityResult`: This event is raised when an activity you launched exits, giving you the requestCode you started it with, the resultCode it returned, and any additional data from it.這句很晦澀啊——當你運行一個存在的活動,……
* `activityBackPressed`: 當行為檢測到用戶按下返回鍵時引發該事件。
> ### 示例
>
> `var application = require("application"); `
>
> `if (application.android) { `
>
> ` application.android.on(application.AndroidApplication.activityCreatedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", Bundle: " + args.bundle); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityDestroyedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityStartedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityPausedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityResumedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityStoppedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.saveActivityStateEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", Bundle: " + args.bundle); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityResultEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", requestCode: " + args.requestCode + ", resultCode: " + args.resultCode + ", Intent: " + args.intent); `
>
> ` }); `
>
> ` application.android.on(application.AndroidApplication.activityBackPressedEvent, function (args) { `
>
> ` console.log("Event: " + args.eventName + ", Activity: " + args.activity); // Set args.cancel = true to cancel back navigation and do something custom. `
>
> ` }); `
>
> `} `
>
> `application.start(); `
### [**iOS UIApplicationDelegate\(UI應用委托\)**](http://docs.nativescript.org/core-concepts/application-lifecycle#ios-uiapplicationdelegate)
從 NativeScript 1.3 起,你可以為IOS應用指定自定義的 UIApplicationDelegate:
> ### 示例
>
> `var application = require("application"); `
>
> `var MyDelegate = (function (_super) { `
>
> ` __extends(MyDelegate, _super); `
>
> ` function MyDelegate() { `
>
> ` _super.apply(this, arguments); `
>
> ` } `
>
> ` MyDelegate.prototype.applicationDidFinishLaunchingWithOptions = function (application, launchOptions) { `
>
> ` console.log("applicationWillFinishLaunchingWithOptions: " + launchOptions); return true; `
>
> ` }; `
>
> ` MyDelegate.prototype.applicationDidBecomeActive = function (application) { `
>
> ` console.log("applicationDidBecomeActive: " + application); `
>
> ` }; `
>
> ` MyDelegate.ObjCProtocols = [UIApplicationDelegate]; `
>
> ` return MyDelegate; `
>
> `})(UIResponder); `
>
> `application.ios.delegate = MyDelegate; `
>
> `application.start(); `
### [**保留和恢復應用設置**](http://docs.nativescript.org/core-concepts/application-lifecycle#persist-and-restore-application-settings)
要保留用戶定義的設置,你需要使用 `application-settings` 模塊。該模塊是一個靜態的單列的哈希表,用于存儲應用程序的鍵值對。 getter 方法有兩個參數:一個key,和一個可選的默認value,以便在指定的key不存在時返回該value。 setter 方法要求有兩個參數: key 和 value 。
> ### 示例
>
> `var applicationSettings = require("application-settings"); `
>
> `// Event handler for Page "loaded" event attached in main-page.xml. `
>
> `function pageLoaded(args) { `
>
> ` applicationSettings.setString("Name", "John Doe"); `
>
> ` console.log(applicationSettings.getString("Name")); `
>
> ` // Prints "John Doe". `
>
> ` applicationSettings.setBoolean("Married", false); `
>
> ` console.log(applicationSettings.getBoolean("Married")); `
>
> ` // Prints false. `
>
> ` applicationSettings.setNumber("Age", 42); `
>
> ` console.log(applicationSettings.getNumber("Age")); `
>
> ` // Prints 42. `
>
> ` console.log(applicationSettings.hasKey("Name")); `
>
> ` // Prints true. `
>
> ` applicationSettings.remove("Name"); `
>
> ` // Removes the Name entry. `
>
> ` console.log(applicationSettings.hasKey("Name")); `
>
> ` // Prints false. `
>
> `} `
>
> `exports.pageLoaded = pageLoaded; `