1

まず、問題の背景について簡単に説明します。

アクティビティのライフサイクルに沿ったバックグラウンドワーカーのライフサイクルの処理で問題が発生しました。最初の問題は、構成が変更されるたびに(これには画面の向きが含まれます)新しいアクティビティのインスタンスが作成されるため、ワーカーを古いインスタンスから新しいインスタンスにプルする必要があったことです。第二に、これは、作業者が進行状況ダイアログを表示することもあれば、ユーザーが操作しなければならないエラーダイアログを表示することもあるという事実によって複雑になります。アクティビティインスタンス全体ですべてのもの(ワーカー、ダイアログなど)を処理することは非常に複雑になっているため、今ではそれが間違った方法であることがはっきりとわかります。

正しい道は、そもそもその再インスタンス化を排除することだったと私は信じています。それが提供された場合、私は非常に単純で単純なライフサイクルで活動し、労働者や対話を追跡する必要はありませんでした。これはandroid:configChanges="..."、マニフェストを挿入することで実現できます。

さて、問題は次のとおりです。

android:configChanges="..."アクティビティにはすべての可能なもの(オリエンテーション、キーボード、その他すべて)が含まれていることを考えると、アクティビティが生きている間に1回だけインスタンス化され、バックグラウンドでも強制終了/再作成されないという保証はありますか?ドキュメントはこの点について明確ではありません。

そのような保証が成り立たない場合を誰かが知っているなら、私に知らせてください。そして最も重要なのは、それらに対してテストするためにそれらのケースをシミュレートする方法ですか?

ご回答ありがとうございます。

PS:ドキュメントには、「システムは必要に応じていつでもアクティビティを削除できる」と書かれていますが、ユーザーが戻ったときに新しいインスタンスの新しいストーリーになるため、ここでは考慮しません。この方法で削除されたアクティビティの画面。この場合、ユーザーがこの画面を開いたときのように、最初から簡単に開始します。

4

2 に答える 2

1

あなたがこれを求めているなら、あなたのアプリはおそらく壊れています。

それで-なぜあなたは気にしますか?再起動中のアクティビティを処理できない場合は、バックグラウンドでアプリのプロセスをメモリのために強制終了する必要があり、ユーザーが後でアプリに戻るという状況に陥ります。

再起動を処理できる場合、アクティビティを再起動する必要がある場合があることをなぜ気にするのですか?

とにかく答えは、アクティビティが再開されないことを保証する方法はないということです。そのため、android:configChangesを悪用してそれを回避しようとしないでください。それを防ぐことはできません。アプリが壊れていることを自分自身にわかりにくくするだけですが、ユーザーはそれでもあなたが抱えているバグに遭遇します。

これに対処するのに問題がある場合は、新しいサポートライブラリでフラグメントやローダーなどの最近の機能を使用することを検討してください。これらには、アプリが再起動中のアクティビティを簡単に処理できるようにする多くの機能があります。フラグメントは再起動後も保持でき、ローダーはデータの読み込みをアクティブに保ちます。

また、アプリの再起動が必要になる可能性のある一連の理由は修正されていません。新しい変更は将来追加される可能性があり、追加される予定であり、それらを説明することはできません。

于 2011-05-31T16:37:52.277 に答える
0

通常、一部のオブジェクトをアクティビティのレクリエーション全体に残したい場合は、アクティビティではなく、アプリケーションのコンテキストに依存させる必要があります。推奨されているように、アプリケーションオブジェクトがシングルトンである場合、アイテムをアクティビティのライフサイクルまで存続させる方がはるかに簡単です。

これを行う方法の例を次に示します。Androidで グローバル変数を宣言する方法は?

于 2011-05-31T16:33:53.700 に答える