package com.kelin.mvvmlight.messenger; import java.lang.ref.WeakReference; import rx.functions.Action0; import rx.functions.Action1; /** * Created by kelin on 15-8-14. */ public class WeakAction<T> { private Action0 action; private Action1<T> action1; private boolean isLive; private Object target; private WeakReference reference; public WeakAction(Object target, Action0 action) { reference = new WeakReference(target); this.action = action; } public WeakAction(Object target, Action1<T> action1) { reference = new WeakReference(target); this.action1 = action1; } public void execute() { if (action != null && isLive()) { action.call(); } } public void execute(T parameter) { if (action1 != null && isLive()) { action1.call(parameter); } } public void markForDeletion() { reference.clear(); reference = null; action = null; action1 = null; } public Action0 getAction() { return action; } public Action1 getAction1() { return action1; } public boolean isLive() { if (reference == null) { return false; } if (reference.get() == null) { return false; } return true; } public Object getTarget() { if (reference != null) { return reference.get(); } return null; } }