3

を変更することは回転変化が発生した場合にメモリリークを回避するために活動を着脱する必要はありませんし、活動が破壊されたために、AsyncTaskで作業getApplicationContext()を使用することをお勧めします?実際には、Activity自体ではなく、穴のアプリケーションに依存するContextが実際に必要なので、正しいことが必要です。コンテキスト、AsyncTaskと回転が

さらに、アクティビティを文脈として使用する方が良い場合は、です(アクティビティの表示にアクセスする必要があるため)...破壊されたときにそれを切り離す(nullに割り当てる)代わりにonCreate()の新しいインスタンスを割り当て、はちょうど分離を避けることができますか?このように、新しいインスタンスを再割り当てするだけで、使用するコンテキストが常に存在するため、NullPointerExceptionの問題を回避できます。

答えて

0

私自身の経験から、AsyncTaskを扱う場合は、ContextとしてActivityを使用する方が、ほとんどの場合、getApplicationContext()よりも良いと言えるでしょう。これは、ほとんどの場合、アクティビティからメンバーにアクセスする必要があり、AsyncTaskでアクティビティへの参照がある場合にのみ許可されるためです。

detach()を避けることについての私の質問に答えるには、@CommonsWareの状態in his answerのように、この場合は避けるか、問題なく実行してください。だから、彼は私たちが活動回転変化時にnullである一方で、我々はNullPointerExceptionを取得することはできませんことを確信している言っていることから:

onProgressUpdate()とonPostExecute()onRetainNonConfigurationInstance(の開始間に懸架されている)と、それ以降のonCreate()の終わりには、

私は間違っていないよ場合は、明示的にちょうど新しく作成された活動のonCreate()で新しいものを再取り付け取り外していないとの主な違いは、古いアクティビティインスタンスを解放ということです数ミリ秒後に再接続するだけです。しかし、最終的な行動はどちらの場合も同じです!

これは他の人に役立つことを願っています! :)

1

This postとその回答は、何をすべきかの説明です。 This postと答えは、AsyncTaskContextの問題の背景にある良い理論を説明しています。

+0

回答ありがとうございました。第2の投稿は、@ CommonSWareの対応に大いに役立ちました。彼は私に 'detach()'となぜそれが働くのかを明らかにした。:) – Caumons

関連する問題