11

この記事を正しく解釈すると、アクティビティ コンテキストを に渡すとAsyncTasksリークが発生する可能性があります。これは、タスクがまだ実行されている間にアクティビティが破棄される可能性があるためです。

AsyncTasks内部クラスではなく、リソースへのアクセスや UI の更新が必要な場合に、これをどのように処理しますか?

さらに、進行状況ダイアログを閉じるために参照が必要な場合、コンテキストのリークを回避するにはどうすればよいでしょうか?

4

1 に答える 1

13

あなたの質問を正しく理解していれば、Java の WeakReference または SoftReference クラスは、このタイプの状況に適しています。これにより、必要に応じて GC がコンテキストを解放するのを妨げずに、コンテキストを AsyncTask に渡すことができます。

GC は、SoftReference を収集するときよりも、WeakReference を収集するときの方が積極的です。

それ以外の:

FooTask myFooTask = new FooTask(myContext);

コードは次のようになります。

WeakReference<MyContextClass> myWeakContext = new WeakReference<MyContextClass>(myContext);
FooTask myFooTask = new FooTask(myWeakContext);

および AsyncTask では、次の代わりに:

myContext.someMethod();

コードは次のようになります。

myWeakContext.get().someMethod();
于 2010-11-18T23:30:54.837 に答える