問題タブ [android-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.
android - How to handle AsyncTask onPostExecute when paused to avoid IllegalStateException
I appreciate the numerous postings regarding AsyncTask on a rotation change. I have the following problem when using the compatability lib and trying to dismiss a DialogFragment
in onPostExecute
.
I have a fragment which fires of an AsyncTask which displays a progress DialogFragment
, then in onPostExecute
dismisses the dialog and then potentially throws up another DialogFragment
.
If when the progress dialog is being displayed I put the application into the background I get the following for my fragment:
1) onPause
2) onSaveInstanceState
3) onPostExecute
in which I try to dismiss and invoke a dialog.
I get an IllegalStateException
because I'm trying to effectively commit a transaction when the activity has saved its state and I understand this.
On a rotation I've assumed (perhaps incorrectly) that I wouldn't get an onPostExecute
until the activity has been recreated. However, when putting the application into the background I assumed (definitely incorrectly) that the onPostExectute
wouldn't get called while the fragment/activity was paused.
My question is, is my solution to simply detect in onPostExecute
that the fragment/activity is paused and simply perform what I need to do in onResume
instead? Seems somewhat ugly to me.
Thanks in advance, peter.
Edit 1
Need to support 2.1 and above
Edit 2
I have considered showing the dialog using FragmentTransaction:add
and FragmentTransaction:commitAllowingStateLoss
however this isn't without its problems.
android - Android アプリケーション コンポーネントの破壊と再作成の詳細
誰かが、次のことに関する具体的で信頼できる(そしてできれば簡潔な)情報の方向に私を押してくれませんか?
コンポーネントがシステムによって破棄され、(該当する場合) 再作成される順序 (フラグメント、アクティビティ、アクティビティの Threads/AsyncTasks/Timers、静的データ (いつクラスがアンロードされるか)、他のクラスの Threads/AsyncTasks/Timers、ホスト TabActivity、アプリがバックグラウンドにある場合とフォアグラウンドにある場合の両方で、ActivityGroup、バインドされたローカル サービス、アプリケーション、プロセス)。
どの時点で破壊を停止できますか (アプリケーションに戻ったときに、「Application オブジェクトを含むすべてが破壊され、プロセスは生きている」など、どのような状態になる可能性がありますか?(Androidを変更せずに)プログラムで同じ種類の破壊を自分自身で引き起こし、システムがそれを行うときと見分けがつかないようにすることは可能ですか、それとも私たち自身がメモリを解放することを選択したとき(onLowMemoryによってトリガーされる)に必要な別のメカニズムですか?
1) からのすべてのシナリオの信頼できる再現手順 (junit.framework でしょうか? 私はそれを調査していません) ?
「ユーザーが長時間タスクを離れた場合、システムはルート アクティビティを除くすべてのアクティビティのタスクをクリアします。ユーザーが再びタスクに戻ると、ルート アクティビティのみが復元されます」: これはプロセス/コンポーネントとは別にありますかライフサイクル/破壊、またはそれに関連付けられていますか?
私は、多くの場合不完全で誤解を招き、時には間違った情報を提供するさまざまな情報源を読みました。
確かに、私はドキュメントの一部をざっと読んだので、何かを見逃したり誤解したりしている可能性があります。
[編集] 誤解を避けるために: 私が求めているのは、Android がコンポーネントを破棄してメモリを解放し、 Activity.onDestroyをバイパスすることです。
アプリをバックグラウンドにして後で戻ると、次のいずれかのシーケンスが発生します。
- onPause、onStop、onRestart、onStart、onResume
- onPause、onStop、Application.onCreate、onCreate(notNull)、onStart、onResume
[EDIT2] バウンティ開始。信頼できる情報が必要です: アクティビティ、フラグメント、アプリケーション、バインドされた (リモートの可能性がある) サービス、プロセス。
部分的/完全な破壊のシナリオ。最初のポイントを参照してください。
android - recreateメソッドの後に再開されないアクティビティの一時停止を実行する
HoneyCombのプロジェクトがあり、メインアクティビティのonResum()メソッドでrecreate()メソッドを使用すると、エラーが発生します。
何が起こっているのかを示すために、新しいプロジェクトを作成します。
あなたはそれをhttp://xp-dev.com/svn/RecreateError/trunk/で見つけることができます
自分のせいはわかりませんが、アクティビティを開始し、アクティビティのライフサイクルをログに記録します。結果:
次に、アクションバーアイコンを押して再作成フラグをアクティブにし、他のアプリに変更します...
そして、recreateフラグをアクティブにしてアクティビティに戻り、onResume()でrecreate()を実行します。
onPause?しかし、私のアクティビティは表示されています、私が間違っていることは何ですか?正しいステータスはonResume()ではありませんか?
そして今、別のアプリに変更するとエラーが発生します。
お時間をいただきありがとうございます。私の英語が下手でごめんなさい。
現時点では、ファイルマネージャーHDなどのアプリケーションがこのアクションを実行する方法がわかりません。
2つのアクティビティ:メインコンテンツとしてPreferenceFragmentを使用したメインアクティビティA、アクティビティB。
HoloとHolo.Lightの間でテーマを変更する1つのオプション、アクティビティBはPreferenceFragmentのメソッドで変更されますが、失敗時にメインアクティビティメソッドにOnSharedPreferenceChangeListener
戻った場合、これを行うにはどうすればよいですか?recreate()
onResume()
混乱しています。ごめん。
android - アクティビティを開いた後に通常のワークフローを復元する
簡単な例を見てみましょう。私は HomeActivity を提示するアプリケーションを持っています。このアクティビティは RssListActivity (RSS アイテムを一覧表示する) につながり、これは単に私の RSS アイテムの詳細ビューを提供する 3 番目の ItemDetailActivity につながる可能性があります。一部の通知により、定義された記事で ItemDetailActivity が開かれる場合があります。
私のポイントは、通知の場合、通常のワークフローを復元することです。つまり、ユーザーが戻るボタンをクリックすると、RssListActivity に移動し、戻るボタンをもう一度クリックすると、HomeActivity に移動します。
もちろん、これらの各アクティビティでカスタム onKeyDown() をオーバーライドする必要はありません。
android - アクティビティを再開するときにダイアログが複数回開かれないようにする
私の Android アプリケーションでは、現在のゲームを再開するかどうかをユーザーに尋ねるために、メインのゲーム アクティビティで「現在のゲームを再開しますか? はい - いいえ」というダイアログを表示します。
問題は、ダイアログに応答せずにこのアクティビティを何度も再開すると、いくつかのダイアログが重なり合って表示されることです。これは明らかに私の目標ではありません。
Boolean var を使用してこの動作を簡単に回避できましたが、Dialog クラスに重複を防止するようなオプションがあるかどうか疑問に思っていました。
android - Android:SupportFragmentManagerを使用する場合のフラグメントの複製
フラグメントに関して非常に奇妙な問題があります。最新のサポートライブラリを使用しています。また、GoogleがIOSCHEDプロジェクトで使用しているのと同様のコードを使用しています
しかし、ローテーション後のアクティビティの再現に問題があります。アクティビティが破棄されて再度作成された後、フラグメントトランザクションを管理するためのメソッドを呼び出します(onStartメソッド内)。この行は1回だけ呼び出されますが、フラグメントが2回作成されます。
これは私の活動方法です:
と私のログ:
そのため、各ローテーション後にフラグメントの数が増えています。
回転後、onStartメソッドに移動する前にフラグメントを復元し、onStartメソッドは同じフレームレイアウトコンテナに2番目の同じフラグメントを作成します。しかし、どこで最初のフラグメントを復元しますか?私はそれを避けたい。または、「if」を変更して、すでに作成されているかどうかをテストする必要がありますか?しかし、私はそれを決定する方法を知りません。nullテストは役に立たないようです。
add()
また、メソッドをに置き換えて、小さな回避策を作成しましたreplace()
。その後、フラグメントの数は増えず、新しいフラグメントがonStart
メソッドで作成される前に、各フラグメントが破棄されます。しかし、これは、onCreateメソッドでいくつかのバックグラウンドプロセスを開始するいくつかのフラグメントで深刻な問題を引き起こします...
私を助けてください...私はそれをどうしたらいいのか本当にわかりません。アドバイスやアイデアをありがとうございました!
android - アプリケーションがバックグラウンドに移行すると、静的インスタンスがクリアされる可能性がありますか?
タスクがバックグラウンドに移行すると、Androidはシングルトンインスタンスをクリアすると誰かが言った。それは本当ですか?
(DDMSを使用して)フォアグラウンドタスクを強制終了しようとすると、アプリケーションが自動的に再起動することに気付きました。デーモンが必要ですよね。
プロセスの再起動として、アプリケーションのonCreateを呼び出すことでアプリを再初期化できるため、フォアグラウンドアプリケーションを再起動しても安全です。
しかし、私はバックグラウンドタスク/アプリケーションについて混乱しています.androidはバックグラウンドタスクを強制終了し、フォアグラウンドアプリと同じように再起動しますか?(私はバックグラウンドアプリケーションを強制終了しようとしますが、再起動せずに終了します)またはdalvikは静的インスタンスをクリアしてリサイクルします?
dalvikが本当にシングルトンをクリアしている場合、どうすればそれを回避できますか?
android - ViewPagerをスワイプするときにフラグメントがonSaveInstanceStateを呼び出さない?
ListViewのスクロール位置が失われるViewPagerに問題があります。
ListViewの状態は、次を使用して簡単に保存および復元できます。
ただし、問題は、フラグメントがスワイプされているときonDestroyView()
に呼び出されますが、呼び出されないことonSaveInstanceState (Bundle outState)
です。
画面を回転させるなどしてListView
状態は正常に復元されますが、スワイプするとリストを正しく復元する方法がわかりません。
android - ビューではなく Android でフラグメントを使用する利点は何ですか?
向けに開発する場合Android
、ターゲット (または最小) SDK を 4 (API 1.6) に設定し、Android 互換性パッケージ (v4) を追加して のサポートを追加できFragments
ます。昨日私はこれを行いFragments
、カスタムクラスからのデータを視覚化するために実装に成功しました。
Fragments
私の質問は次のとおりです。カスタム オブジェクトからビューを取得するだけでなく、API 1.5 を引き続きサポートするのではなく、使用するメリットは何ですか?
たとえば、クラス Foo.java があるとします。
どちらのメソッドも、たとえば表示する があるアクティビティで作成して操作するのは非常に簡単ですList<Foo>
(たとえば、プログラムでそれぞれを に追加するScrollView
)。Fragments
上記のコードなどを使用してビューを取得しますか?