これは最終的にあなたの質問に到達しますが、私は最初に、この執筆時点ですでに与えられているさまざまな回答に対するさまざまなコメントで提起するいくつかの問題に対処したいと思います。私はあなたの考えを変えるつもりはありません。むしろ、これらは将来この投稿を読むようになる他の人のためにここにあります。
重要なのは、アプリがいつ終了するかをAndroidが判断できないようにすることです。それはユーザーの選択でなければなりません。
何百万もの人々が、環境が必要に応じてアプリケーションを閉じるモデルに完全に満足しています。これらのユーザーは、Androidアプリの「終了」については考えていません。Webページの「終了」またはサーモスタットの「終了」について考えている以上のことはありません。
多くのiPhoneアプリは、アプリが実際にシャットダウンされている場合でも、ユーザーが中断したところをピックアップするため、iPhoneユーザーはほとんど同じです。現在、一度に1つのサードパーティアプリを使用できます)。
上記で述べたように、私のアプリでは多くのことが行われています(データがデバイスにプッシュされている、常にそこにあるべきタスクのリストなど)。
「常にそこにあるべきタスクのリスト」の意味はわかりませんが、「デバイスにプッシュされるデータ」は楽しいフィクションであり、どのような場合でもアクティビティによって行われるべきではありません。スケジュールされたタスクを使用して(を介してAlarmManager
)、信頼性を最大にするためにデータを更新します。
ユーザーがログインすると、電話がかかってきてAndroidがアプリを強制終了することを決定するたびに、ログインを行うことができなくなります。
これを処理する多くのiPhoneおよびAndroidアプリケーションがあります。通常は、ユーザーに手動でログインするように強制するのではなく、ログオン資格情報を保持するためです。
たとえば、アプリケーションを終了するときに更新を確認します
これは、どのオペレーティングシステムでも間違いです。ご存じのとおり、アプリケーションが「終了」している理由は、OSがシャットダウンしているため、更新プロセスが途中で失敗するためです。一般的に、それは良いことではありません。開始時に更新を確認するか、完全に非同期に(たとえば、スケジュールされたタスクを介して)更新を確認し、終了時は確認しません。
一部のコメントは、戻るボタンを押してもアプリがまったく終了しないことを示唆しています(上記の私の質問のリンクを参照)。
戻るボタンを押しても「アプリを終了」することはありません。ユーザーが[戻る]ボタンを押したときに画面に表示されていたアクティビティを終了します。
ユーザーが終了したい場合にのみ終了する必要があります-他の方法で終了することはありません。Androidでそのような動作をするアプリを作成できない場合、Androidは実際のアプリの作成には使用できないと思います=(
次に、Webアプリケーションもできません。または、WebOS(モデルを正しく理解している場合(まだモデルを使用する機会がなかった場合))。これらすべてにおいて、ユーザーは何も「終了」せず、そのままにしておくだけです。iPhoneは少し異なります。現在のところ、一度に実行できるのは1つだけです(いくつかの例外はあります)。そのため、離脱すると、アプリがすぐに終了します。
アプリケーションを本当に終了する方法はありますか?
他の誰もが言ったように、ユーザー(BACK経由)またはコード(経由finish()
)は、現在実行中のアクティビティを閉じることができます。ユーザーは通常、適切に作成されたアプリケーションについては、Webアプリケーションを使用するための「終了」オプションが必要とする以上のものは何も必要としません。
定義上、2つのアプリケーション環境が同じになることはありません。つまり、新しい環境が発生し、他の環境が埋没するにつれて、環境の傾向を確認できます。
たとえば、「ファイル」の概念を排除しようとする動きが高まっています。ほとんどのWebアプリケーションは、ユーザーにファイルを考えさせることを強制しません。iPhoneアプリは通常、ユーザーにファイルのことを考えさせません。Androidアプリは通常、ユーザーにファイルを思い込ませません。等々。
同様に、アプリを「終了」するという概念を排除しようとする動きが高まっています。ほとんどのWebアプリケーションは、ユーザーに強制的にログアウトさせるのではなく、一定時間操作がないと暗黙的にユーザーをログアウトさせます。Androidでも同じですが、iPhone(および場合によってはWebOS)でも同様です。
これには、ビジネス目標に焦点を当て、以前のアプリケーション環境に関連付けられた実装モデルに固執しないで、アプリケーション設計をさらに強調する必要があります。これを行う時間や傾向がない開発者は、既存のメンタルモデルを破壊する新しい環境に苛立ちます。これは、どちらの環境の障害でもありません。山を通過するのではなく、その周りを嵐が流れるための山の障害です。
たとえば、HypercardやSmalltalk などの一部の開発環境では、アプリケーションと開発ツールが1つのセットアップに混在しています。この概念は、(例えば、アプリケーションに言語拡張のあまり、外側にキャッチしていないVBAでエクセル、AutoCADでのLisp)。そのため、アプリ自体に開発ツールの存在を想定したメンタルモデルを思いついた開発者は、モデルを変更するか、モデルが成り立つ環境に限定する必要がありました。
だから、あなたが書くとき:
私が発見した他の厄介なことに加えて、私はAndroid用のアプリを開発することは起こらないと思います。
それは今のところ、あなたにとって、最高のことだと思われます。同様に、Androidで報告したのと同じ問題のいくつかがWebアプリケーションでも見つかる(たとえば、「終了」がない)ため、アプリケーションをWebに移植しようとしないように助言します。それとも、あなたは逆に、いつかあれば行うポートWebにあなたのアプリケーションを、Webアプリケーションのフローは、Androidのためのより良い試合になることを見つけることが、あなたはその時点でのAndroidのポートを再訪することができます。