首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务到UI层的同步消息

从服务到UI层的同步消息
EN

Stack Overflow用户
提问于 2012-06-22 07:57:10
回答 2查看 542关注 0票数 1

是否保证广播意图的顺序?也就是说,如果我这样做了,

代码语言:javascript
复制
sendBroadcast(intent1);
sendBroadcast(intent2);

能保证接收器在intent2之前得到intent1吗?我怀疑这个问题的答案是否定的,但在这种情况下,我不太确定如何解决我的问题。

我正在尝试为我的应用程序创建一个“忙”指示器,当设备在网络上通话时显示忙碌,然后在网络通信完成时消失。所有的网络通信都发生在一个意图服务中。

我的尝试是在服务中开始网络通信时发送BUSY_START意图,并在网络通信结束时发送BUSY_STOP。这似乎在很大程度上是有效的,但我发现偶尔会得到停止和启动消息的顺序。

有没有更好的方法来解决这个问题?

我在考虑为每个忙碌的意图添加一个ID,这样它们就可以配对了。这样,如果我收到一个start,而我已经收到了一个stop,我可以忽略它。或者,也许更简单地,在每个广播中添加一个整数序列号。如果我曾经接收到当前意图的序列小于最后接收的意图的序列的广播,请忽略它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-26 04:32:40

意图的至少一个可行的替代方案是通过应用程序类执行消息传递,即,

notify为应用程序中的侦听器对象集合创建侦听器/提供方法以添加/删除listener

  • Interested实体调用应用程序方法以添加/删除自身作为侦听器

  • 在应用程序中添加"notify“方法,这些侦听器接口方法在每个已注册的

上调用相应的侦听器接口方法调用应用程序的通知方法到

例如,

代码语言:javascript
复制
public class MyApplication extends Application {
  public interface MyListener {
    void onEvent();
  }

  private Set<MyListener> listeners = new HashSet<Listener>();

  public void addListener(MyListener l) {
    listeners.add(l);
  }

  public void removeListener(MyListener l) {
    listeners.remove(l);
  }

  public void sendEvent() {
    for (MyListener l: listeners) { l.onEvent(); }
  }
}

现在,根据您的活动(或片段),

代码语言:javascript
复制
public class MyActivity extends Activity implements MyListener {
    ...
    ...
    ...

    @Override
    public void onEvent() {
      // do something
    }

    @Override
    protected void onResume() {
        super.onResume();

        ((MyApplication)getApplication()).addListener(this);
    }

    @Override
    protected void onPause() {
        super.onPause();

        ((MyApplication)getApplication()).removeListener(this);
    }
}

在你的服务中,

代码语言:javascript
复制
((MyApplication)getApplication()).sendEvent();

这在不使用意图或静态变量的情况下提供同步消息传递。

票数 0
EN

Stack Overflow用户

发布于 2012-06-22 09:00:08

您是否考虑过在IntentService中使用Handler对象从后台线程进行通信?与BroadcastReciver方法相比,处理程序的优势在于,处理程序使用消息队列对消息对象进行排序。

(我假设您的服务与应用程序的主线程处于相同的进程中)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11148496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档