4

Phonegap アプリケーションがあり、バックグラウンドでいくつかの手順を実行したいと考えています。つまり、Phonegap アクティビティが表示されていない間に何らかのロジックを実行します。今のところ、これらの手順を実行するネイティブ サービスを作成することはできないため、Phonegap アクティビティ自体をサービスとして機能させたいと考えています。もちろん、Service として実行するロジックは Javascript であり、通常の Android Service として実装することはできません。私が考えた解決策の 1 つは、Phonegap アクティビティを一種の疑似サービスとして扱い、「ダミー」または空のサービス (startServiceおよび を使用startForeground) を生成することです。Phonegap アクティビティのライフサイクルはサービスのライフサイクルに結び付けられ、バックグラウンドで Javascript コードを実行し続けるという考え方です。

Phonegap を知っているかどうかに関係なく、私の質問は次のとおりです。プロセス内でフォアグラウンド サービスを生成して優先順位を付ける場合、これはアクティビティのライフサイクルに影響しますか? サービス (およびそのプロセス) が存続し、メインのアクティビティがメモリから消去される可能性はありますか?

アクティビティのライフサイクルが影響を受けるという保証がない場合、実際に何が起こるかについて何か言えますか?

4

2 に答える 2

2

私が考えた解決策の1つは、「ダミー」または空のサービス(startServiceとstartForegroundを使用)を生成することにより、Phonegapアクティビティを一種の疑似サービスとして扱うことです。

それができれば、(ネイティブJavaコードで単に空のサービスを作成するのではなく)ネイティブJavaコードで実際のサービスを実装でき、このナンセンスをすべて回避できます。

Phonegapアクティビティのライフサイクルはサービスのライフサイクルに関連付けられているため、バックグラウンドでJavascriptコードを実行し続けるという考え方です。

AFAIKWebViewは、プロセスにが存在するかどうかを知りませんし、気にServiceしません。WebViewが表示されていないときにJavaScriptを無期限に実行し続けるという保証WebViewはありません。また、PhoneGapアプリはほとんど単なるものであるためWebView、この文書化されていないWebView動作に依存しています。

プロセス内にフォアグラウンドサービスを生成することでプロセスに優先順位を付ける場合、これはアクティビティのライフサイクルに影響しますか?サービス(およびそのプロセス)が存続し、メインアクティビティがメモリからクリアされる可能性はありますか?

ユーザーは[戻る]ボタンを押してアクティビティを破棄できます。これは、サービスを開始したかどうかに影響されません。

ユーザーは、タスクマネージャー(Android 4.0以降の最近のタスクリストなど)を使用してバックグラウンドプロセスをシャットダウンできます。これは、サービスを開始したかどうかに影響されません。

ユーザーは、[設定]からアプリを強制的に停止して、コードが許可なく再度実行されないようにすることができます。これは、サービスを開始したかどうかに影響されません。

OSは、プロセスを独自に終了することを歓迎しますstartForeground()。これは、ライフタイムパスではありません。

とはいえ、後者の3つのシナリオでは、プロセスが実行されると、アクティビティとサービスが連携して停止します。戻るボタン(または呼び出しfinish()、または未処理の例外)のみがアクティビティを停止させますが、サービスはオンのままになります。

于 2012-09-01T12:01:02.287 に答える
1

CommonsWare は、包括的な回答を提供しました。これまでの経験を活かして増やしていきたいです。

はい、ダミーのサービスを生成して呼び出すことstartForeground()で、アプリケーションをバックグラウンドで確実に実行できました。私と私の少数のユーザーは、OS がアプリを自動的に強制終了したことを見たことがありません。

しかし、アクティビティを手動で終了するたびに (Recents からスワイプアウトする)、サービスも停止しますただし、PhoneGap のコンテキストでは、かなり論理的に見えます。

また、PhoneGap を使用すると、この回答で説明されているように、戻るボタンの動作をオーバーライドできます。

于 2013-02-12T08:56:40.127 に答える