Android,使用RxJava获取当前活动

时间:2017-02-07 08:05:29

标签: android rx-java

在Android中,我想获得目前最活跃的活动名称。不推荐使用<TextBlock Text="{Binding AlertBoxMessage, Mode=OneWay, NotifyOnTargetUpdated=True}" Name="AlertBox" MinHeight="55" FontWeight="Normal" FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="Black"> <TextBlock.Style> <Style TargetType="{x:Type TextBlock}"> <Style.Triggers> <EventTrigger RoutedEvent="Binding.TargetUpdated"> <BeginStoryboard> <Storyboard Storyboard.TargetProperty="Foreground.Color"> <ColorAnimation From="Black" To="Red" AutoReverse="True" RepeatBehavior="3x" Duration="0:0:2"/> </Storyboard> </BeginStoryboard> </EventTrigger> </Style.Triggers> </Style> </TextBlock.Style> </TextBlock> 等方法,用户应启用ActivityManager.getRunningTasks(1);。因此我决定通过 RxJava 来做到这一点。基本上,我将有一个将持有主题的Singleton类。我将在活动恢复时和活动暂停时更新此主题。此外,我将从我的后台服务订阅此主题以获取当前正在运行的Activity。

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

主题持有人Singleton类ActivityTracker.class

AccessibilityService

VideoPlayerActivity.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();

}

1 个答案:

答案 0 :(得分:1)

  

我的问题是,我应该如何同步获取当前的活动   在后工作中的名字。

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

   public Observable<String> getActivityName() {
       return currentActivity.asObservable();
   }
从外面你可以做到:

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

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

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