41

ウィジェットにやけどを負った。問題の原因はわかりましたが、その理由や解決策はわかりませんでした。私のウィジェットは検索(SearchManager)を発行していて、アクティビティは検索ダイアログを起動しましたが、それが私のウィジェットにコールバックすると、ウィジェットへの別の参照が作成されました(つまり、スレッドIDは同じですが、ウィジェットID 65から0に変更されました)。

これにより、新しいインスタンスが作成されていると思い、ドキュメントで問題に適用される設定を検索しました。最終的に、私はそれに遭遇しandroid:launchMode="singleTop"、AndroidManifest、ビオラに設定するとすぐに!私のウィジェットは機能しました。

これは私がデバッグするのに2日の大部分を要しました。

他の状況はありますか、それとも私の問題に対するより技術的に正しい答えがありますか?

4

1 に答える 1

54

私はAndroidドキュメントでもっと読みました-私は彼らのドキュメントを読んで一生を過ごし、私の脳を壊す新しい微妙な詳細を見つけることができました:)これは私が予期していなかった私の複数のインスタンスを説明します、しかし私は起こるように構成しました。

AndroidManifest.xmlのアクティビティ定義に関するAndroidドキュメント

「標準」モードと「singleTop」モードは、1つの点で互いに異なります。「標準」アクティビティの新しいインテントがあるたびに、そのインテントに応答するクラスの新しいインスタンスが作成されます。各インスタンスは単一のインテントを処理します。同様に、「singleTop」アクティビティの新しいインスタンスを作成して、新しいインテントを処理することもできます。ただし、ターゲットタスクのスタックの最上位にアクティビティの既存のインスタンスがすでにある場合、そのインスタンスは(onNewIntent()呼び出しで)新しいインテントを受け取ります。新しいインスタンスは作成されません。他の状況-たとえば、「singleTop」アクティビティの既存のインスタンスがターゲットタスクにあるが、スタックの一番上にない場合、またはスタックの一番上にある場合、

于 2010-07-19T16:51:06.250 に答える