Attempt to fix selector memeory leak. Add update checker

This commit is contained in:
hyb1996
2017-04-09 14:02:57 +08:00
parent 6844eb9841
commit 0e980c2e6a
72 changed files with 1282 additions and 415 deletions

View File

@@ -4,12 +4,16 @@ import android.accessibilityservice.AccessibilityService;
import android.os.Build;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import com.stardust.autojs.runtime.JavascriptInterface;
import com.stardust.view.accessibility.AccessibilityDelegate;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
import com.stardust.view.accessibility.AccessibilityServiceUtils;
import org.greenrobot.eventbus.EventBus;
import java.lang.ref.WeakReference;
import java.util.Map;
import java.util.SortedMap;
@@ -26,7 +30,8 @@ public class AccessibilityWatchDogService extends AccessibilityService {
private static final String TAG = "AccessibilityWatchDog";
private static final SortedMap<Integer, AccessibilityDelegate> mDelegates = new TreeMap<>();
private static WeakReference<AccessibilityWatchDogService> instance;
private static final Object LOCK = new Object();
private static AccessibilityWatchDogService instance;
private Executor mExecutor = Executors.newSingleThreadExecutor();
public static void addDelegate(int uniquePriority, AccessibilityDelegate delegate) {
@@ -38,9 +43,7 @@ public class AccessibilityWatchDogService extends AccessibilityService {
}
public static AccessibilityWatchDogService getInstance() {
if (instance == null)
return null;
return instance.get();
return instance;
}
@Override
@@ -58,24 +61,52 @@ public class AccessibilityWatchDogService extends AccessibilityService {
});
}
@Override
public AccessibilityNodeInfo getRootInActiveWindow() {
try {
return super.getRootInActiveWindow();
} catch (IllegalStateException e) {
e.printStackTrace();
return null;
}
}
@Override
public void onInterrupt() {
}
@Override
public void onDestroy() {
instance = null;
super.onDestroy();
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
// FIXME: 2017/2/12 有时在无障碍中开启服务后这里不会调用服务也不会运行安卓的BUG???
Log.v(TAG, "onServiceConnected");
instance = new WeakReference<>(this);
instance = this;
super.onServiceConnected();
synchronized (LOCK) {
LOCK.notifyAll();
}
// FIXME: 2017/2/12 有时在无障碍中开启服务后这里不会调用服务也不会运行安卓的BUG???
}
public static void disable() {
if (instance != null && instance.get() != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
instance.get().disableSelf();
if (instance != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
instance.disableSelf();
} else {
AccessibilityServiceTool.goToAccessibilitySetting();
}
}
public static void waitForEnabled(long timeOut) {
synchronized (LOCK) {
try {
LOCK.wait(timeOut);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}