gpt4 book ai didi

Android,使用 RxJava 获取当前 Activity

转载 作者:行者123 更新时间:2023-11-30 00:44:04 26 4
gpt4 key购买 nike

在 Android 中,我想获取当前最顶层的 Activity 名称。 ActivityManager.getRunningTasks(1); 等方法已弃用,AccessibilityService 应由用户启用。因此,我决定通过 RxJava 来做到这一点。基本上,我将有一个包含 Subject 的 Singleton 类。我将在 Activity 恢复和 Activity 暂停时更新此主题。此外,我将从我的后台服务订阅此主题以获取当前正在运行的 Activity 。

我的问题是,我应该如何在后台作业中同步获取我当前的 Activity 名称。

主题持有者单例类ActivityTracker.class

public class ActivityTracker {
private static ActivityTracker instance;

public static synchronized ActivityTracker getInstance() {
if (instance == null) {
instance = new ActivityTracker();
}
return instance;
}

public PublishSubject<String> currentActivity = PublishSubject.create();

}

VideoPlayerActivity.class

ActivityTracker.getInstance().currentActivity
.onNext(VideoPlayerActivity.class.getSimpleName());

最佳答案

My question is, how should I synchronously get my current Activity name in background job.

你不应该。您应该始终订阅并将名称作为他 onNext 的一部分。如果你想这样做,你应该将 Subject 公开为 Observable,例如

   public Observable<String> getActivityName() {
return currentActivity.asObservable();
}

然后你可以从外面做:

ActivityTracker.getInstance().getActivityName().toBlocking().first();

toBlocking 会将您的 Observable 转换为 BlockingObservable 并且 first 将阻止执行,直到第一个项目是发出

我强烈建议你阅读科目类型之间的差异。如果我在你身边,我会使用 BehaviourSubject

关于Android,使用 RxJava 获取当前 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42084652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com