バックグラウンド/フォアグラウンド間でのアプリ状態の遷移
アプリの状態は、さまざまなユースケースによってバックグラウンドとフォアグラウンドの間で切り替わります。この遷移をテストすると、アプリのウォーム起動シナリオや、アプリがバックグラウンドになったときに実行する必要のあるアクションを理解するために役立ちます。このページでは、フォアグラウンドとバックグラウンド間のアプリの遷移をシミュレートする方法について説明します。
一般的なユースケース
フォアグラウンドとバックグラウンド間の遷移のテストに使用できる一般的なユースケースには、次のようなものがあります。
- アプリの実行中に「ホーム」ボタンを押す(バックスタックが消去されます)
- 別のアプリへのディープリンクを使用する(バックスタックは消去されません)
- 専用のアプリ起動ボタンを押す
- Alexa音声認識ボタンを押す(アプリの上にオーバーレイとして表示されます)
バックスタックの動作により、ユーザーが戻るキーを押したときに、バックグラウンドのアプリに戻ることができるかどうかが決まります。
ライフサイクルマネージャーとアプリフレームワーク
アプリをフォアグラウンドまたはバックグラウンドに移動する処理を担うのは、VegaデバイスのVegaライフサイクルマネージャー(LCM)コンポーネントです。LCMは、Fire TVホームランチャーからの呼び出しに基づいて動作します。LCMの詳細については、アプリの管理・通信ツールを参照してください。
バックグラウンド/フォアグラウンド間の遷移のシミュレーション
ここでは、フォアグラウンドとバックグラウンド間のアプリの遷移をシミュレートするために使用できるさまざまなメカニズムを紹介します。
ホームランチャーによるアプリのバックグラウンドへの移動
このメカニズムでは、VegaデバイスでFire TVホームランチャーアプリを起動することで、実行中のアプリをバックグラウンドに送ります。この動作は、実際のシナリオで最も一般的なユースケースです。実際のシナリオでは、ホームキーを押したときに同じコマンドが実行され、目的の動作が達成されます。
アプリをバックグラウンドに移動する方法
vda shell vlcm launch-app os://home
このコマンドにより、ホームランチャーアプリが起動します。RCUのホームボタンを押したときにも、上記のコマンドでシミュレートされる動作と同じアクションが実行されます。
アプリの一覧を取得して表示されているアプリを確認する方法
次のコマンドを使用すると、実行されているすべてのアプリの一覧を表示して、目的のアプリがバックグラウンドで動作しているかどうかを確認できます。
vda shell vlcm list
アプリがフォアグラウンドにある状態での新しいアプリの起動
アプリが現在フォアグラウンドにある状態で別のアプリを起動した場合も、現在のアプリがバックグラウンドに送られます。この動作は、システムサービス以外に複数のアプリがインストールされている場合にのみシミュレートできます。
vda shell vlcm launch-app orpheus://<別のアプリのアプリID>
Alexaの起動によるアプリのバックグラウンドへの移動
Alexaを呼び出してカタログタイトルを検索すると、アプリをバックグラウンドに移動できます。アプリをバックグラウンドに移動するには、次の手順を実行します。
- リモコンの「音声認識」ボタンを長押しします。
- Alexaに話しかけて、何らかのコンテンツを検索します。
Vegaデバイスはユニバーサル検索を使用するため、検索結果が表示されるときに、自動的に現在のアプリがバックグラウンドに移動されます。
アプリを再びフォアグラウンドに戻す方法
アプリをフォアグラウンドに戻す動作は、アプリをもう一度起動する動作と似ていますが、ウォームスタート(たとえば、アプリがバックグラウンドで実行されている状態での再開)になる点が異なります。アプリをフォアグラウンドに移動するには、次のコマンドを実行します。
vda shell vlcm launch-app orpheus://<アプリID>
アプリの状態を処理するメカニズム
Vegaアプリでは、AppStateを通じてReact Native APIにアクセスできます。AppStateを使用すると、アプリの現在の状態が「active」か「background」かを確認できます。アプリで「change」イベントリスナーに登録して、AppStateの変更通知を受け取ることもできます。
import React, { useRef, useState, useEffect } from 'react';
import { AppState, StyleSheet, Text, View } from 'react-native';
const AppStateExample = () => {
const appState = useRef(AppState.currentState);
const [appStateVisible, setAppStateVisible] = useState(appState.current);
useEffect(() => {
const subscription = AppState.addEventListener('change', nextAppState => {
console.log('現在のAppState:', appState.current);
console.log('次のAppState:', nextAppState);
if (
appState.current.match(/inactive|background/) &&
nextAppState === 'active'
) {
console.log('アプリがフォアグラウンドになりました');
}
appState.current = nextAppState;
setAppStateVisible(appState.current);
console.log('AppState:', appState.current);
});
return () => {
subscription.remove();
};
}, []);
return (
<View style={styles.container}>
<Text>現在の状態:{appStateVisible}</Text>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
},
});
export default AppStateExample;
詳細については、Vega向けReact NativeのAppStateに関するドキュメント(英語のみ)を参照してください。
バックグラウンドに移動したアプリのクリーンアップ
アプリがバックグラウンドに移動したときは、次のクリーンアップ手順を実行します。
- コンテンツ再生の停止 - メディアデコーダーと再生リソースを解放します。
- ライフサイクルの状態の更新 - バックグラウンド/フォアグラウンドステータスの状態追跡を調整します。
- メモリの最適化 - 使用しないメモリリソースを解放します。
- ウォームスタートの有効化 - バックグラウンド状態からアプリをすばやく再開できるようにします。
これらの手順により、リソースの使用が最適化され、ユーザーエクスペリエンスが向上します。
Last updated: 2025年10月22日

