[解決済み] アプリケーションを終了することは嫌われますか?
質問
Androidの勉強を続けながら、私はちょうど 以下をお読みください。 :
質問です。 ユーザーはアプリケーションを終了させることができますか? メニューに終了させるオプションを入れない限り、終了させることはできないのでしょうか?そのようなオプションがない場合。 どのようにアプリケーションを終了させるのですか?
回答 (Romain Guy): ユーザーが行うのではなく、システムが自動的に処理します。そのためのアクティビティライフサイクル(特にonPause/onStop/onDestroy)なのです。どんなことをしても、quot;quit"やquot;exit"のアプリケーションボタンはつけないでください。Androidのアプリケーションモデルでは役に立ちません。また、コアアプリケーションの動作にも反しています。
Androidの世界に一歩踏み出すたびに、何かしらの問題にぶつかりますね =(
Androidでは、アプリケーションを終了させることはできないようです(しかし、Androidのシステムは、その気になればいつでもあなたのアプリケーションを完全に破壊することが可能です)。どうしたんだろう?アプリを終了させようと思ったときに終了できるような、普通のアプリとして機能するアプリを書くのは無理なんじゃないかと思い始めています。それはOSに頼るべきことではありません。
私が作ろうとしているアプリケーションは、アンドロイドマーケット用のアプリケーションではありません。一般消費者が広く使うアプリケーションではなく、ごく狭いビジネス分野で使うビジネスアプリケーションです。
Androidプラットフォームは、Windows Mobileや.NETに存在する多くの問題を解決しているので、実は、このプラットフォームでの開発をとても楽しみにしていました。しかし、この1週間は、私にとってやや不本意なものとなってしまいました...。Androidを放棄する必要がないことを望みますが、今はあまり良い状況ではないようです =(
次のような方法はありますか? 本当に アプリケーションを終了しますか?
解決方法を教えてください。
これは最終的にあなたの質問に行き着くのですが、まず、この文章を書いている時点ですでに与えられているさまざまな回答に対するあなたのさまざまなコメントで提起されているいくつかの問題を取り上げたいと思います。私はあなたの考えを変えるつもりはありません -- むしろ、これらは将来この記事を読みに来る他の人のためにここにあるのです。
<ブロッククオート要は Androidは、私のアプリがいつであるかを決定する 終了させなければならない。 を選択することができます。
何百万人もの人々が、必要に応じて環境がアプリケーションを終了させるというモデルに完全に満足しています。そのようなユーザーは、Webページの終了やサーモスタットの終了を考えるのと同じように、Androidアプリの終了について考えないだけです。
iPhoneユーザーも同様で、iPhoneのボタンを押しても、必ずしもアプリが終了したようには感じません。なぜなら、iPhoneのアプリの多くは、たとえ本当にアプリが終了していたとしても、ユーザーが中断したところから再開するからです(iPhoneでは現在、一度に一つのサードパーティ製アプリしか使用できないため)。
<ブロッククオート上記で述べたように、たくさんの 私のアプリで行われていること(データ デバイスにPUSHされる、タスクのあるリスト 常にそこにあるべきもの、など)。
しかし、quot; data being PUSHed to the device"は楽しいフィクションで、いかなる場合でもアクティビティによって行われるべきものではありません。スケジュールされたタスクを使って(via
AlarmManager
) を使用してデータを更新することで、最大の信頼性を得ることができます。
私たちのユーザーはログインして、そんなことしている場合ではないのです。 電話がかかってくるたびに とAndroidがアプリを終了させることを決定しました。
iPhoneやAndroidのアプリケーションには、これに対応したものがたくさんあります。通常、ユーザーに毎回手動でログインさせるのではなく、ログイン認証情報を保持するためです。
例えば アプリケーションを終了するとき
それはどんなOSでも間違いです。アプリケーションが終了する理由は、OSがシャットダウンするためであり、そうなると更新プロセスは途中で失敗します。一般的に、これは良いことではありません。起動時にアップデートをチェックするか、完全に非同期でアップデートをチェックし(例:スケジュールされたタスク経由)、決して終了時にチェックしないようにしてください。
いくつかのコメントでは バックボタンでアプリを終了させることはできません。 ということです(上記質問のリンク参照)。
BACKボタンを押しても、アプリを終了させることはできません。それは、ユーザーがBACKボタンを押したときに画面上にあったアクティビティを終了させるのです。
<ブロッククオート終了するのは ユーザが終了させたいのであって、決して それ以外の方法では、決してできません。もし書けないのなら Androidでそのような振る舞いをするアプリはありません。 Androidは使えないと思います。 本当のアプリを書くために =(
では、Webアプリケーションはどうかというと、そうでもない。あるいは ウェブオーエス もし私が彼らのモデルを正しく理解していればですが(まだ触る機会がない)。iPhoneは少し違っていて、現在のところ一度に1つのものしか実行できないので(いくつかの例外はありますが)、離れるという行為は、かなり即座にアプリを終了させることを意味します。
本当に終了させる方法はありますか? を使用することはできますか?
他のみなさんが教えてくれたように、ユーザー(BACK経由)またはあなたのコード(
finish()
は、現在実行中のアクティビティを終了させることができます。一般に、適切に記述されたアプリケーションでは、ウェブアプリケーションを使用する際に "quit" オプションが必要なのと同じように、ユーザーは他のものを必要としません。
アプリケーションの環境は、定義上、2つとして同じものはありません。つまり、新しい環境が生まれ、他の環境が埋もれていくことで、環境のトレンドが見えてくるのです。
例えば、「ファイル」という概念をなくそうという動きが活発になっています。ほとんどのWebアプリケーションでは、ユーザーにファイルという概念を強要することはなく、iPhoneアプリでも一般的にファイルという概念を強要することはありません。Androidアプリは、通常、ユーザーにファイルについて考えることを強要しません。といった具合です。
同様に、アプリを終了させるという概念をなくそうとする動きも活発になっています。ほとんどのWebアプリケーションは、ユーザーに強制的にログアウトさせるのではなく、一定時間操作がないと暗黙のうちにログアウトさせるようになっています。Androidでも同じことが言えますし、iPhone(そしておそらくWebOS)でも、その程度は低いでしょう。
そのためには、以前のアプリケーション環境に縛られた実装モデルに固執せず、ビジネスゴールに焦点を当てたアプリケーション設計をより重視する必要があります。このようなことをする時間や意欲のない開発者は、既存のメンタルモデルを壊すような新しい環境に不満を持つことになります。これはどちらの環境のせいでもなく、嵐が山を通り抜けるのではなく、山の周りを流れているのと同じことです。
例えば、開発環境には、以下のようなものがあります。 ハイパーカード やSmalltalkでは、アプリケーションと開発ツールが一体化したセットアップになっていました。このコンセプトは、アプリの言語拡張以外ではあまり普及しませんでした(例. VBA で エクセル , AutoCADにおけるLisp ). そのため、アプリ自体に開発ツールが存在することを前提としたメンタルモデルを考えた開発者は、そのモデルを変更するか、そのモデルが成立する環境に限定する必要があったのです。
だから、書くときは
<ブロッククオート他の雑多なものとともに ということで のアプリは、Android向けにはなりません。 ということになります。
それは、今のところ、あなたにとって最善の方法だと思われます。Androidで報告された問題のいくつかは、Webアプリケーションでも見られるからです(たとえば、quot;termination"がないなど)。また、逆に、いつの日かあなたが する Webに移植することで、WebアプリケーションのフローがAndroidにマッチすることがわかり、その時にAndroidへの移植を再検討することができます。
関連
-
AndroidエミュレーターのADBサーバーがACKしない問題
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
Android Studio を 3.6.3 にアップデートした後、構成 :classpath のアーティファクトをすべて解決できない。
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
Android Studio常见错误之:Rendering Problems/The following classes could not be instantiated
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] Androidアプリケーションのアクティビティ間でデータを受け渡すにはどうすればよいですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] グリッドレイアウトにおけるフリングジェスチャーの検出
-
[解決済み] アイコンのミップマップ描画可能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
プログラム "git.exe "を実行できない場合の正しい解決方法です。CreateProcessエラー=2
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
アンドロイドプロジェクトのパッケージングにgradleを使用する際の問題点
-
アプリはGoogle検索でインデックスされません Androidmanifestのクソみたいな黄色い警告
-
Android開発で「Attempt to invoke virtual method 'XXX()' on null object reference」というヌルポインター例外に遭遇する。
-
Error:A problem occurred configuring project ':app'. > ビルドを見つけられませんでした。
-
Android カスタムスピナーコントロールのドロップダウン・ボックスの実装
-
問題 ---- Android ---- ActivityManager: Error: アクティビティクラス{xx/xx.MainActivity}が存在しない