CatVodSpider/app/src/main/java/com/github/catvod/spider/Init.java

77 lines
2.5 KiB
Java

package com.github.catvod.spider;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import com.github.catvod.crawler.SpiderDebug;
import java.lang.reflect.Field;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Init {
private final ExecutorService executor;
private final Handler handler;
private Application app;
private static class Loader {
static volatile Init INSTANCE = new Init();
}
public static Init get() {
return Loader.INSTANCE;
}
public Init() {
this.handler = new Handler(Looper.getMainLooper());
this.executor = Executors.newFixedThreadPool(5);
}
public static Application context() {
return get().app;
}
public static void init(Context context) {
get().app = ((Application) context);
SpiderDebug.log("自定義爬蟲代碼載入成功!");
}
public static void execute(Runnable runnable) {
get().executor.execute(runnable);
}
public static void run(Runnable runnable) {
get().handler.post(runnable);
}
public static void run(Runnable runnable, int delay) {
get().handler.postDelayed(runnable, delay);
}
public static Activity getActivity() throws Exception {
Class<?> activityThreadClass = Class.forName("android.app.ActivityThread");
Object activityThread = activityThreadClass.getMethod("currentActivityThread").invoke(null);
Field activitiesField = activityThreadClass.getDeclaredField("mActivities");
activitiesField.setAccessible(true);
Map<?, ?> activities = (Map<?, ?>) activitiesField.get(activityThread);
for (Object activityRecord : activities.values()) {
Class<?> activityRecordClass = activityRecord.getClass();
Field pausedField = activityRecordClass.getDeclaredField("paused");
pausedField.setAccessible(true);
if (!pausedField.getBoolean(activityRecord)) {
Field activityField = activityRecordClass.getDeclaredField("activity");
activityField.setAccessible(true);
Activity activity = (Activity) activityField.get(activityRecord);
SpiderDebug.log(activity.getComponentName().getClassName());
return activity;
}
}
return null;
}
}