基础概念
应用
处理应用程序全局状态
Application 类提供了围绕 Android 的 android.app.Application 和 iOS 的 UIApplication 的包装器。使用此类,您可以处理应用程序的生命周期事件,在 Android 上发送广播或在 IOS 上添加通知观察者等。
使用 Application 类
注册广播接收器
要注册广播接收器,请按照以下 3 个步骤操作
从
@nativescript/core
导入Application
类。tsimport { Application, isAndroid } from '@nativescript/core'
获取 android.app.Application 实例的包装器对象。使用
android
属性获取围绕 android.app.Application 的包装器。tsconst androidApp: AndroidApplication = Application.android
调用 registerBroadcastReceiver 方法。在
androidApp
上调用registerBroadcastReceiver
方法。tsandroidApp.registerBroadcastReceiver()
有关显示如何使用自定义意图过滤器注册广播接收器的完整示例,请访问以下链接
对于系统意图过滤器,请参阅 标准广播操作。
取消注册广播接收器
要取消注册广播接收器,请在围绕 android.app.Application 的包装器上调用 unregisterBroadcastReceiver,并将其传递给要取消注册广播接收器的意图过滤器。以下示例取消注册了用于 android.content.Intent.ACTION_BATTERY_CHANGED
意图过滤器的广播接收器。
import { Application, isAndroid } from '@nativescript/core'
if (isAndroid) {
const androidApp: AndroidApplication = Application.android
androidApp.unregisterBroadcastReceiver(
android.content.Intent.ACTION_BATTERY_CHANGED
)
}
添加通知观察者
要添加 iOS 通知观察者,请按照以下步骤操作
从
@nativescript/core
导入Application
类。tsimport { Application, isIOS } from '@nativescript/core'
获取 UIApplication 实例的包装器对象。
tsconst iOSApp: iOSApplication = Application.ios
调用
addNotificationObserver
方法。调用addNotificationObserver
,将其传递给要观察的通知的名称(NSNotificationName) 作为第一个参数,并将回调函数作为第二个参数,该回调函数将在该通知发生时被调用。tsconst observer: any = iOSApp.addNotificationObserver( UIDeviceOrientationDidChangeNotification, (notification: NSNotification) => { //Handle the notification } )
在此处查找完整示例 此处
移除通知观察者
要移除通知观察者,请在 Application.ios
参考上使用 removeNotificationObserver
方法,将 addNotificationObserver
返回的观察者 ID 作为第一个参数,并将要停止观察的通知的名称作为第二个参数。
iOSApp.removeNotificationObserver(
observer,
UIDeviceBatteryStateDidChangeNotification
)
跨平台应用程序事件
此类允许您在两个平台上侦听以下生命周期事件。
Application.on('orientationChanged', (args: ApplicationEventData) => {
// handle the event
})
更多事件
livesync
cssChanged
initRootView
launch
displayed
suspend
resume
exit
lowMemory
uncaughtError
discardedError
orientationChanged
systemAppearanceChanged
fontScaleChanged
getResources()
resources: any = Application.getResources()
获取应用程序级别的静态资源。
setResources()
Application.setResources(resources)
设置应用程序级别的静态资源。
setCssFileName()
Application.setCssFileName(filePath)
设置应用程序的 css 文件名。
getCssFileName()
cssFileName: string = Application.getCssFileName()
获取应用程序的 css 文件名。
loadAppCss()
loadedCss: any = Applicatioin.loadAppCss()
立即加载 app.css。默认情况下,app.css 文件在“加载”后不久加载。对于 Android 快照,CSS 可以在快照生成期间进行解析,因为 CSS 不依赖于运行时 API,并且将显式调用 loadAppCss。
addCss()
Application.addCss(cssText, attributeScoped)
将新值添加到应用程序样式。
cssText
- 要添加到当前应用程序样式的有效 CSS 样式。- 可选:
attributeScoped
- 设置样式是否为属性范围样式。添加属性范围样式不会执行完整的应用程序样式刷新。
Android 参考
android
androidApp: AndroidApplication = Application.android
此属性为您提供 AndroidApplication
对象,它是围绕原生 android 应用程序实例的 Nativescript 包装器。
nativeApp
nativeApp: android.app.Application = androidApp.nativeApp
// or
nativeApp: UIApplication = iOSApp.nativeApp
这是一个原生应用程序引用。
对于 Android,它是 android.app.Application 实例,跟踪全局应用程序状态。从此对象中,您可以获取诸如 getFilesDir()、onLowMemory() 等方法。
对于 iOS,它返回应用程序的 UIApplication 实例的引用。
foregroundActivity
foregroundActivity = androidApp.foregroundActivity
获取当前可见(最顶层)的 android Activity。
startActivity
startActivity = androidApp.startActivity
获取应用程序的主(启动)Activity。
paused
isSuspended: boolean = androidApp.paused
如果主应用程序活动未运行(已挂起),则返回 true
,否则返回 false。
backgrounded
isInBackground: boolean = androidApp.backgrounded
如果主应用程序活动处于后台,则返回 true
registerBroadcastReceiver
receiver = androidApp.registerBroadcastReceiver(intentFilter, onReceiveCallback)
注册 BroadcastReceiver 以在主活动线程中运行。接收器将使用与意图过滤器匹配的任何广播意图进行调用。
onReceiveCallback
:每次收到广播时都会调用的回调函数。
getRegisteredBroadcastReceiver
androidApp.getRegisteredBroadcastReceiver(intentFilter)
获取为指定意图过滤器注册的 BroadcastReceiver。
unregisterBroadcastReceiver
androidApp.unregisterBroadcastReceiver(intentFilter)
取消注册之前为指定意图过滤器注册的 BroadcastReceiver。
Android Activity 生命周期事件
要处理 Android 的应用程序生命周期事件,请使用
androidApp.on('activityResumed', (args) => {
//handle the event here
})
更多 Android Activity 生命周期事件
activityCreated
activityDestroyed
activityStarted
activityPaused
activityStopped
saveActivityState
activityResult
activityBackPressed
activityNewIntent
activityRequestPermissions
iOS 参考
ios
iOSApp = Application.ios
此属性为您提供 iOSApplication
对象,它是围绕原生 iOS 应用程序实例的 Nativescript 包装器。
rootController
rootController: UIViewController = iOSApp.rootController
iOS 应用程序的根视图控制器。
window
此属性提供关键的 窗口,它是应用程序视图的容器,其作用之一是将触摸事件传递给视图。视图是用户界面项目,例如按钮、标签或滚动视图。
delegate(iOS 生命周期事件)
const 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
@NativeClass()
class MyDelegate extends UIResponder implements UIApplicationDelegate {
public static ObjCProtocols = [UIApplicationDelegate]
applicationDidFinishLaunchingWithOptions(
application: UIApplication,
launchOptions: NSDictionary<string, any>
): boolean {
console.log('applicationWillFinishLaunchingWithOptions: ' + launchOptions)
return true
}
applicationDidBecomeActive(application: UIApplication): void {
console.log('applicationDidBecomeActive: ' + application)
}
}
Application.ios.delegate = MyDelegate
iOS 系统监视应用程序的不同状态,并在每个状态下发出事件。要处理这些生命周期事件,您必须编写一个扩展 UIResponder 并实现 UIApplicationDelegate
类的类,并将 delegate 属性设置为该类。然后,您覆盖 UIApplicationDelegate
中的方法来处理事件。
有关 iOS 生命周期事件的完整列表,请访问 UIApplicationDelegate。
orientation
orientation = androidApp.orientation
// or
orientation = iOSApp.orientation
获取或设置应用程序的方向。
可能的值:portrait
| landscape
| unknown
systemAppearance
systemAppearance = androidApp.systemAppearance
// or
systemAppearance = iOSApp.systemAppearance
返回系统外观是 dark
、light
还是 null
(对于 iOS <= 11)。