fix: バックグラウンドでのデータ取得を継続し、列車追跡の終了条件をフォアグラウンドに依存させるよう修正

This commit is contained in:
harukin-expo-dev-env
2026-03-23 15:52:23 +00:00
parent 4b518b848e
commit 2cd5142262
3 changed files with 19 additions and 6 deletions

2
.gitignore vendored
View File

@@ -58,3 +58,5 @@ android/
ios/
!modules/**/ios/
*.ipa
*.apk
*.aab

View File

@@ -13,6 +13,7 @@ import {
ScrollView,
Platform,
PermissionsAndroid,
AppState,
} from "react-native";
import { getTrainType } from "@/lib/getTrainType";
import { trainDataType, trainPosition } from "@/lib/trainPositionTextArray";
@@ -70,8 +71,11 @@ export const FixedTrain: FC<props> = ({ trainID }) => {
if (stationData) {
setTrain(stationData);
} else {
alert("追跡していた列車が消えました。追跡を終了します。");
setFixedPosition({ type: null, value: null });
// バックグラウンドでは一時的にデータが消えることがある→フォアグラウンド時のみ終了
if (AppState.currentState === "active") {
alert("追跡していた列車が消えました。追跡を終了します。");
setFixedPosition({ type: null, value: null });
}
}
}, [trainID, currentTrain]);
@@ -212,8 +216,15 @@ export const FixedTrain: FC<props> = ({ trainID }) => {
const delayTime = train?.delay == "入線" ? 0 : train?.delay;
let additionalSkipCount = 0;
// 2駅間走行中の場合はposition[1]向かっている駅をstopStationIDListから直接探してサーチ開始
const searchStart = currentPosition.length === 2
? (() => {
const toIdx = stopStationIDList.findIndex(d => d.includes(currentPosition[1]));
return toIdx >= 0 ? toIdx : searchCountFirst;
})()
: searchCountFirst;
for (
let searchCount = searchCountFirst;
let searchCount = searchStart;
searchCount < points.length;
searchCount++
) {

View File

@@ -83,7 +83,7 @@ export const AllTrainDiagramProvider: FC<Props> = ({ children }) => {
useEffect(() => {
getTrainDiagram();
}, []);
useInterval(getTrainDiagram, 30000); //30秒毎に全在線列車取得
useInterval(getTrainDiagram, 30000, true, true); //30秒毎に全在線列車取得(バックグラウンドでも継続)
const getCustomTrainData = () => {
fetch("https://jr-shikoku-backend-api-v1.haruk.in/train-data")
@@ -100,7 +100,7 @@ export const AllTrainDiagramProvider: FC<Props> = ({ children }) => {
// カスタム列車データの取得
getCustomTrainData();
}, []);
useInterval(getCustomTrainData, 30000); // 30秒毎にカスタム列車データ取得
useInterval(getCustomTrainData, 30000, true, true); // 30秒毎にカスタム列車データ取得(バックグラウンドでも継続)
const [todayOperation, setTodayOperation] = useState<OperationLogs[]>([]); // 本日の運行情報
const getTodayOperation = () => {
@@ -122,7 +122,7 @@ export const AllTrainDiagramProvider: FC<Props> = ({ children }) => {
// カスタム列車データの取得
getTodayOperation();
}, []);
useInterval(getTodayOperation, 30000); // 30秒毎にカスタム列車データ取得
useInterval(getTodayOperation, 30000, true, true); // 30秒毎にカスタム列車データ取得(バックグラウンドでも継続)
const getTodayOperationByTrainId = (train_id: string) => {
const returnData: OperationLogs[] = [];