applicationモジュールを使用すると、アプリケーションの起動からユーザー定義の設定の保存まで、NativeScriptアプリケーションのライフサイクルを管理できます。
applicationモジュールから実行されるrunメソッドはアプリケーションを起動するために必要であり、ルートXMLファイルへのパスを受け入れます。
/*
iOS calls UIApplication and triggers the application main event loop.
*/
const application = require("tns-core-modules/application");
application.run({ moduleName: "app-root" });
/*
iOS calls UIApplication and triggers the application main event loop.
*/
import * as application from "tns-core-modules/application";
application.run({ moduleName: "app-root" });
NativeScriptアプリケーションには、次のライフサイクルイベントがあります。
const application = require("tns-core-modules/application");
application.on(application.launchEvent, (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, (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, (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.displayedEvent, (args) => {
// args is of type ApplicationEventData
console.log("displayedEvent");
});
application.on(application.orientationChangedEvent, (args) => {
// args is of type OrientationChangedEventData
console.log(args.newValue); // "portrait", "landscape", "unknown"
});
application.on(application.exitEvent, (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, (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, (args) => {
console.log("Error: " + args.error);
});
application.run({ moduleName: "app-root" });
import { displayedEvent, exitEvent, launchEvent, lowMemoryEvent,
orientationChangedEvent, resumeEvent, suspendEvent, uncaughtErrorEvent,
ApplicationEventData, LaunchEventData, OrientationChangedEventData, UnhandledErrorEventData,
on as applicationOn, run as applicationRun } from "tns-core-modules/application";
applicationOn(launchEvent, (args: LaunchEventData) => {
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);
}
});
applicationOn(suspendEvent, (args: ApplicationEventData) => {
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);
}
});
applicationOn(resumeEvent, (args: ApplicationEventData) => {
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);
}
});
applicationOn(displayedEvent, (args: ApplicationEventData) => {
console.log("displayedEvent");
});
applicationOn(orientationChangedEvent, (args: OrientationChangedEventData) => {
// "portrait", "landscape", "unknown"
console.log(args.newValue)
});
applicationOn(exitEvent, (args: ApplicationEventData) => {
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);
}
});
applicationOn(lowMemoryEvent, (args: ApplicationEventData) => {
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);
}
});
applicationOn(uncaughtErrorEvent, function (args: UnhandledErrorEventData) {
console.log("Error: " + args.error);
});
applicationRun({ moduleName: "app-root" });
NativeScriptアプリケーションには、次のAndroid固有のアクティビティイベントがあります。
const application = require("tns-core-modules/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.run({ moduleName: "app-root" });
import { android, AndroidApplication, AndroidActivityBundleEventData } from "tns-core-modules/application";
// Android activity events
if (android) {
android.on(AndroidApplication.activityCreatedEvent, function (args: AndroidActivityBundleEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", Bundle: " + args.bundle);
});
android.on(AndroidApplication.activityDestroyedEvent, function (args: AndroidActivityEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
});
android.on(AndroidApplication.activityStartedEvent, function (args: AndroidActivityEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
});
android.on(AndroidApplication.activityPausedEvent, function (args: AndroidActivityEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
});
android.on(AndroidApplication.activityResumedEvent, function (args: AndroidActivityEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
});
android.on(AndroidApplication.activityStoppedEvent, function (args: AndroidActivityEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
});
android.on(AndroidApplication.saveActivityStateEvent, function (args: AndroidActivityBundleEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity + ", Bundle: " + args.bundle);
});
android.on(AndroidApplication.activityResultEvent, function (args: AndroidActivityResultEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity +
", requestCode: " + args.requestCode + ", resultCode: " + args.resultCode + ", Intent: " + args.intent);
});
android.on(AndroidApplication.activityBackPressedEvent, function (args: AndroidActivityBackPressedEventData) {
console.log("Event: " + args.eventName + ", Activity: " + args.activity);
// Set args.cancel = true to cancel back navigation and do something custom.
});
}
application.run({ moduleName: "app-root" });
NativeScriptではiOSアプリケーションにカスタムのUIApplicationDelegateを指定できます。
const application = require("tns-core-modules/application");
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;
application.run({ moduleName: "app-root" });
import { ios, run as applicationRun } from "tns-core-modules/application";
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)
}
}
ios.delegate = MyDelegate;
applicationRun({ moduleName: "main-page" });
ユーザー定義の設定を保持するには、application-settingsモジュールを使う必要があります。 このapplication-settingsモジュールは、アプリケーションのキーと値のペアを格納する静的なシングルトンハッシュテーブルです。
取得(getter)メソッドには、キーと、指定されたキーが存在しない場合に返すデフォルト値(オプション)の2つのパラメータがあります。設定(setter)メソッドには、キーと値の2つの必須パラメータがあります。
const applicationSettings = require("tns-core-modules/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;
import { EventData } from "tns-core-modules/data/observable";
import * as applicationSettings from "tns-core-modules/application-settings";
// Event handler for Page "loaded" event attached in main-page.xml.
export function pageLoaded(args: EventData) {
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.
}