2012-01-22 10 views
5

私は自分の画面が表示される前に別のアクティビティを呼び出す必要があるアンドロイドのアクティビティを持っています(ユーザからパスワードを取得する必要があります)。私のコードは現在、onResume()内からstartActivity()を呼び出してこれを行います。それは作品の並べ替え、しかし私は一貫性のない動作を得ている。このアプローチが合法であるかどうか誰にでも教えてもらえますか?そうでない場合はどうすればいいですか?onResume()内からstartActivity()を呼び出すことはできますか?

ありがとう、リチャード。

+0

_inconsistent_ビヘイビアを定義しますか? –

+0

画面の向きが変化したときにアクティビティが破棄され再作成されると、異常が発生します。ポートレートからランドスケープに進むと、2つのアクティビティーのメソッド(stop、resume et al)への呼び出しの順序が逆になり、デバッガーではシーケンスがもう一度異なります。私は何らかの競争状態を疑う。私はまた、logcatにsystem_processから 'resumed'の予期しない再開の苦情があることに気づいた。 – user1163984

答えて

5

絶対に大丈夫です。私はこれを行う多くのアクティビティを持っています。アクティビティが停止している間に起こったイベントに反応することがよくあります。

すべてstartActivity()はAndroidに新しいアクティビティを開始し、メインスレッドが利用可能になったときにバックスタックの先頭に追加するように指示します。このインスタンスは、Androidがすべての必要なライフサイクルコールバックを最近の活動。

あなたが奇妙な行動を起こしているなら、私はこれに関連しているとは思わないでしょう。

0

onResume()からstartActivity()を呼び出すことはできますが、非同期呼び出しです。したがって、onResume()(および現在のアクティビティの他のメソッド)は、Android OSがstartActivity()非同期呼び出しに近づき、新しいアクティビティを開始するまで実行を継続します。

矛盾したの動作は、OSが新しいアクティビティを読み込むまでの無期限のアクティビティに関連している可能性があります。

+0

'startActivity()'は非同期ですが、非ブロッキングであり、ブロッキングではなく、 'onResume()'は呼び出し直後に続き、他のアクティビティを待つことはありません。 – Frxstrem

0

確かに合法ですが、正確に何をしたいかによっては、実際的ではないかもしれません。一般的な方法は、マニフェストで定義されているような "2番目の"アクティビティから始めて、最初のアクティビティに引き渡すことです。さらに別の方法は、例えば、 onCreate()のいずれかを呼び出す前に実行することができます。setContentView()これを行うには多くの方法がありますので、もっと正確な答えを出すにはもう少し詳しい情報が必要です。

0

いいアイデアのようには聞こえません。

いくつかの選択肢:

  • は、パスワードの入力を求めるためには、あなたが活動するのではなく、ダイアログを使用することができます。

  • いつもこの中間的な活動を経由するわけではありません。場合にはあなたがサービスに接続しながら、それがアニメーションのような何かを、示すことができ、パスワードの入力を要求する必要はありません(パスワードを仮定すると、ネットワークのことである)onResume()startActivity()を呼び出す

+0

パスワードはアクティビティに表示されているコンテンツを復号化するため、データを表示する前にパスワードを使用できるようにしたいと考えています。この問題は、画面の向きが変更されたときに発生します(アクティビティが破棄されたときに意図的にパスワードを削除するため)。 – user1163984

+0

デバイスの電源を入れたときにパスワードを再入力する必要はありますか? –

+0

まあ、この場合、私はユーザーです。しかし、はい、私は、画面の向きの変化に起こったことを止める方法を見つける必要があります。 – user1163984

関連する問題