次のコードでNULLポインタ例外が発生するかどうかを調べようとしていました。原因はこれかもしれない:チェックは時刻Xで行われる。しかし、私はハンドラに実行可能ファイルをポストし、彼はX + 5で実行する。彼は強力な参照を持っている必要があり、その間にRunnableがgc-edされないようにします。AndroidのWeakReferencesとHandler
正しいですか? (。Aはありません、あなたは彼がゆえの間でのRunnable ているGC-EDを防止し、強い参照を持っている必要があり
public class WeakRunnableUiList
{
private ArrayList<WeakReference<Runnable>> _items = new ArrayList<WeakReference<Runnable>>();
private Handler _handler = new Handler(Looper.getMainLooper());
public void Add(Runnable r)
{
_items.add(new WeakReference<Runnable>(r));
}
public void Execute()
{
ArrayList<WeakReference<Runnable>> remove = new ArrayList<WeakReference<Runnable>>();
for (WeakReference<Runnable> item : _items)
{
if (item.get() == null)
{
remove.add(item);
}
else
{
_handler.post(item.get());
}
}
_items.removeAll(remove);
}
}
ありがとう、お勧めしますが、ハンドラがNULLに対応していれば、とにかく心配する必要はありません。しかし、最後の行は、NULLを取得しないようにしなければならない場合のベストプラクティスのように見えます。 –