ユーザーがイントラネット Web サイトを使用しているときに、バックグラウンドでデータを処理する必要があるエンタープライズ アプリケーションを作成しています。アプリケーションのマニフェストは BROWSABLE インテント フィルターを適切に宣言し、ブラウザーは JavaScript を介してそれを適切に開始します。
通常、アプリケーションはユーザーには見えないため、アプリケーションは、JavaScript が呼び出している URI からパラメーターをバックグラウンド サービスに渡すだけで、それ自体を終了します。ただし、場合によっては、一部のバックグラウンド サービスでユーザーの操作が必要になることがあります。この場合、メイン アクティビティは終了しません。代わりに、必要な情報/アクションをユーザーに要求し、すべての条件が満たされた場合にのみ終了します。
上記のすべては、直接的なユーザー操作の結果としてブラウザーからアプリケーションがトリガーされる限り、完全に機能します (ユーザーがコントロールをクリックする -> JavaScript 関数が呼び出される -> JS 関数がアプリケーションに登録された URI を要求する - > アプリケーションが表示され、ユーザーの入力を待ちます)。
ただし、JS が Web ページでの直接的なユーザー操作なしで (たとえば、onLoad() イベント ハンドラーから) 呼び出された場合、アプリケーションは適切に開始されますが、エラーや例外がスローされることなく、OS によってほぼ瞬時に終了されます。onPause()、次に onDestroy() を呼び出すだけで、それだけです。バックグラウンド サービスは引き続き実行されますが、メイン アクティビティはなくなり、ユーザーと対話する機会が失われます。
この動作を示している理由と、それを抑制または回避する方法を知っている人はいますか?
更新:android:launchMode="singleInstance"
マニフェストに設定すると、アプリケーションは期待どおりに一貫して動作します。私の特定のケースでは、これで問題は解決しますが、一般的な動作はまだわかりません。