問題タブ [activity-lifecycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
256 参照

android - onPause での ANR keyDispatchingTimedOut

特定のアクティビティ画面でユーザーが大量のデータを入力できるアプリがあります。ユーザーが何らかの理由で突然この画面から移動した場合、データをアプリの SQLite データベースに保存します。このアプリは 2 年近くリリースされており、ANR タイムアウトに遭遇したことはありませんが、先月以内に市場で 2 つのレポートを受け取りました。

あるケースでは、データベースを閉じようとしたときに問題が発生しました。それ以外の場合は、データベースを開こうとしたときに問題が発生しました。問題をまったく再現できませんが、実行されている手順の正確な順序はわかりますが、何を変更できるかがわからないという問題があります。どちらも、データベースのミューテックスを保護することを中心に展開しました。ミューテックスは自分で作成しません。これはシステムの問題です。

基本的に、onPause が呼び出され、データベースが開かれ、データがファイルに書き込まれ、データベースが閉じられます。私が理解している限り、これは、データを SharedPreferences に格納できない場合 (私のデータは格納できない) の場合の適切な方法です。

データベースを開いたり閉じたりするのに時間がかかる理由がわかりません。私の唯一の仮定は、これらの問題は、アプリを非常に長い間使用しているユーザーから発生しているため、データベース ファイルが非常に大きくなり、システムがデータベース ファイルをロックするのに時間がかかる可能性があるということです (私はここで推測するだけです)。

onPause から AsyncTask を開始することも考えましたが、それは間違っているようです。助言がありますか?

0 投票する
3 に答える
520 参照

android - Android OS は、リロード時にルート アクティビティを強制終了し、ルートおよびトップ レベルのアクティビティをリロードしようとします。この動作を停止する方法はありますか?

アプリケーションに長年問題があり、解決できませんでした。私のアプリは、StartActivityForResult で互いに呼び出す複数のアクティビティで構成されています。次に、応答を待って、それに応じて行動します。これは、通常の状況では正常に機能します。マニフェストに次のセットがあります。

Android OS がアプリ内のアクティビティを強制終了することを決定すると、ルート アクティビティを強制終了したいようです。次のようなログ エントリが表示されます。

この時点でルート アクティビティと、実行中のアプリケーションとサービスが閉じているように見えます。

その後、もう一度アプリを起動して (またはホーム ボタンを長押しして) アプリに戻ると、強制終了メッセージが表示されます。ログには次のように書かれています。

問題は、これがルート アクティビティのサブ アクティビティであり、最後に表示されるアクティビティであることです。ルート アクティビティで開かれているデータベースから配列アダプターを生成するため、有効ではなくなりました。また、再起動されたばかりであるため、この時点で開いているデータベースはありません。データベースとレコードを OnSaveInstanceState に保存するので、何も失われませんが、データベースは暗号化を使用し、セキュリティ上の理由からキーが保存またはキャッシュされることはないため、データベースを再度開いて位置を復元することはできません。この場合、ルート アクティビティに戻りたいだけです。

アプリが強制終了された後に再起動したときにアプリを完全に再起動し、アクティビティを復元しようとしない方法があるかどうかを知りたいです。ユーザーが切り替えて戻った場合に常にルートに戻るように設定できる起動モードがあることは知っていますが、この場合はオプションではありません。ルート アクティビティが強制終了されたときにアプリを完全に強制終了したいだけです。

アドバイスをよろしくお願いします。

0 投票する
1 に答える
2663 参照

android - 活動のライフサイクル

アクティビティのライフサイクル全体を理解しようとしています。

そのため、Googleで検索して、アクティビティのライフサイクルに関するチュートリアルをたくさん見つけましたが、すべてのチュートリアルで、ライフサイクル図にこれらのメソッドが見つかりませんでした
1。2 OnContentChanged()
. OnPostCreate()
3. OnPostResume()
4. OnWindowfocusChanged()
5.6.7 OnuserLeaveHint()
OnUserInteraction()
OnDetachedFromWindow()

これらのメソッドがAndroidドキュメントのアクティビティライフサイクル図に含まれていない理由を知りたいです。

もう1つの質問:
アクティビティが最初に作成されると、システムはOnContentChanged()最初のメソッドとしてメソッドを呼び出し、システムによる最後の呼び出しはOnDetachedFromWindow()アクティビティが強制終了されたときのメソッドですが、Androidドキュメントではアクティビティの存続期間全体がとの間OnCreate()で発生すると述べていOnDestroy()ますか?

0 投票する
2 に答える
81 参照

android - ビューはいつ境界を取得しますか?

私はそれにメインActivityを持っTextViewています。アプリケーションの起動時にいくつかのアクションを実行する必要があります。これらのアクションはTextViewの境界を使用します。

override onCreate()onStart()およびonResume()メソッドを試しましたが、TextViewのバインドは常に (0,0) です。

TextViewサイズを取得する瞬間をキャプチャするにはどうすればよいですか?

全てに感謝!

0 投票する
1 に答える
153 参照

android - Android アプリケーションのライフサイクルの混乱

アクティビティを不明な回数再利用するアプリケーションがあります。走る

a> b1||c1 > b2|| c2 > ...

a > b1 > b2 > b1 に移動すると、アプリには引き続き b1 リストが画面に表示されますが、それをクリックすると、対応する b2 アクティビティに移動します。bのデータを保持するために使用するarrayListは、bの正しいインスタンス用に復元する必要があります。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleを読んでいます が、同じアクティビティを再度使用しているため、onPause と onResume が機能するとは思いません。

0 投票する
2 に答える
3262 参照

android - startActivityForResult は、アプリを終了する 2 番目のアクティビティを開始します

シナリオ

アクティビティ A (ログイン) がアクティビティ B を開始してから、finish();

アクティビティ B は startActivityForResult(Activity C) を呼び出します

アクティビティ C は適切に実行され、電話番号を選択した後に終了します (当然のことです)。

-- デスクトップに戻ります (アプリが停止します)。

アクティビティ B の onActivityResult() に戻らなかったのはなぜですか?

ノート

アクティビティ B に適切な onActivityResult() を作成しました。

startActivityForResult に関する stackoverflow のすべてのデータを検索して読み取りました。

コードスリップ

アクティビティ B を開始するコード:

アクティビティ C を開始するコード:

コード仕上げアクティビティ C:

ログ

0 投票する
1 に答える
206 参照

java - Android - 複数のアクティビティの再起動での同時実行の問題

エミュレーター (ADT v17.0.0) またはデバイス (元の Droid) で方向の変更を行うと、アクティビティが複数の作成と破棄のサイクルを経ることがあることに気付きました。問題について言及しているこのブログ投稿を見つけましたが、解決策はありません。

私のアプリ (API 8) は現在、onPause でユーザー データの「ラストチャンス」保存を行い、そのデータを onCreate/onStart で取得します。これは、1 回の再起動では正常に機能しますが、サイクルが戻ってくると同時実行の問題が発生します。 -戻る。具体的には、保存が完了する前にロードが開始された場合、「ラストチャンス」データが失われます。

onRetainNonConfigurationInstance/getLastNonConfigurationInstance を介してオブジェクトを転送することについて言及している Faster Screen Orientation Change Android 開発者の記事を読みました。アクティビティが「再起動中」かどうかを示すフラグのように onRetain/getLast... を使用してみましたが、これは機能しますが、既存の保存/読み込み操作がいつ完了したかがわからないという主な問題がまだあります。

同時実行とスレッド管理は私の最強のスーツではないので、メモリリークなしで、連続した再起動の回数にかかわらず、少なくとも 1 回の保存と読み込みを行うソリューションを探しています。高速な作成と破棄のサイクルは向き以外の理由で発生する可能性があるため、向きの変更だけを壊したり処理したりするだけのアイデアは、私が求めているものではありません。

これは、いくつかのサイクルを含むログ ファイルの抜粋です。横向きから縦向きに移動するときに、アクティビティが 2 回作成および破棄される場所を確認できます。これが私が今持っているものの抜粋です:

0 投票する
1 に答える
325 参照

android - Androidでのアクティビティの再作成とプロセスの再作成の違い

私はしばらくこれを理解しようとしてきましたが、今は前進していないようです。基本的に、アクティビティが破棄されて再作成されるときと、アクティビティが実行されるプロセスが破棄されて再作成されるときの違いを理解しようとしています。

ここの図によると: http://developer.android.com/reference/android/app/Activity.html、基になるアプリプロセスが再作成された場合にのみ、アクティビティが再作成されるようです。

ただし、ボタンが 1 つの単純なプログラムを作成するとします。

ボタンをクリックすると、数字 15、16、17 が表示されます。ただし、プログラムを終了してメイン メニューに移動して再入力するか、画面の向きを変更すると、15 に再設定されます。したがって、アクティビティが再作成されている必要があります。

ただし、プログラムは常に実行されているため (タスク マネージャーに移動するとわかるように)、プロセスは破棄されていません。

同様に、変数 test を静的変数に変更すると、アクティビティが破棄されて再作成されても、その値が保持されます。したがって、プロセスはアクティビティとは別個のものでなければなりません。

Android アクティビティ サイトの図によると、アクティビティは、基になるプロセスに対してメモリが少なすぎる場合にのみ再作成されますが、ここでは、画面の向き、移動など、他の多くのシナリオで再作成されるようです。メインメニューなど

私の質問は次のとおりです。Activity ライフサイクルと基になる Process ライフサイクルの違いは何ですか? また、基になるプロセスを保持する Android の図に示されていないアクティビティの再作成のパスはありますか?

この質問についてご協力いただきありがとうございます。

0 投票する
1 に答える
1048 参照

android - 閉じた後もバックグラウンドで実行されているアプリを閉じるにはどうすればよいですか

私のアプリケーションは正常に実行されており、新しいアクティビティに移動するときにコードを次のように使用しました

そして、以前のアクティビティに戻らなければならないときは、次のコードを使用しました

そうすることで活動の積み重ねが見えてくるのではないかと思います。そして、ボタンまたは電話の戻るボタンをクリックすると、次のコードを使用しました

しかし、私のアプリケーションはまだバックグラウンドで実行されています。また、android:noHistory="true"アプリがバックグラウンドから強制終了されたのを使用しましたが、アプリが強制的に閉じられるというメッセージが表示されました。finish();最後のアクティビティへの単純な移動。アプリケーションを終了するというリンクも見ました- それは眉をひそめていますか? しかし、私は新しいので、あまり得られませんでした。どうすればこれに対処できるかを教えてください。

0 投票する
1 に答える
661 参照

android - 強制終了の場合のAndroidサービスの停止

私の Android アプリケーションでは、サービスをバックグラウンドで実行します。メディアプレイヤーアプリです。再生ボタンが押されるたびにサービスが開始され、ユーザーが停止ボタンを押すか、アプリケーションを正常に閉じるたびにサービスが停止されます。実際には、フォアグラウンド アクティビティを閉じる前に stopService() メソッドを呼び出しています。画面の回転中にサービスを維持する必要があります。そのため、フォアグラウンド アクティビティの onDestroy() メソッドで Service を停止していません。しかし、何らかの理由で強制終了が発生した場合、サービスが停止しないことに気付きました。

強制終了の場合、どうすればサービスを停止できますか? onDestroy() 以外のアクティビティを強制終了する前に、最終的なジョブを実行できる特定のリスナーはありますか?