【问题标题】:Best practice for pass info from Service to Activity (or Fragment)将信息从服务传递到活动(或片段)的最佳实践
【发布时间】:2014-04-25 00:51:49
【问题描述】:

我在我的Android 应用程序上运行Socket.IO 客户端,我无法将数据从Service(处理套接字连接)传递到Fragments 之一。

在我的一个Activities 中,我打开了一个包含个人资料页面的片段。当配置文件片段打开时,我向服务器发出一个事件,询问配置文件信息。

我可以毫无问题地从服务器获取信息,但是我无法将该数据(JSON 字符串)发送到当前片段。

将此信息从Service 传递到Fragment(或Activity)的最佳做法是什么?

谢谢!

【问题讨论】:

    标签: android android-fragments socket.io android-service


    【解决方案1】:

    您可以从Activitybindservice 并创建一个service connection。这样你就有instanceservice 进行交流。

    在这里查看我的回答How to pass a handler from activity to service关于如何绑定到服务并建立服务连接。

    除此之外,在您的服务中定义一个interface

    public interface OnServiceListener{
        public void onDataReceived(String data);
    }
    

    service 中添加set Listener 方法,从Activity 注册监听器

    private OnServiceListener mOnServiceListener = null;
    
    public void setOnServiceListener(OnServiceListener serviceListener){
        mOnServiceListener = serviceListener;
    }
    

    接下来,在你的Activity中实现Listener接口

    公共类 MainActivity 扩展 ActionBarActivity 实现 CustomService.OnServiceListener{

        @Override
        public void onDataReceived(String data) {
    
         }
    }
    

    接下来,当服务连接建立后,注册监听器

        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            customService = ((CustomService.LocalBinder) iBinder).getInstance();
            customService.setOnServiceListener(MainActivity.this);
        }
    

    现在,当您在服务中收到数据时,通过onDataReceived 方法将数据传递给 Activity。

    if(mOnServiceListener != null){
            mOnServiceListener.onDataReceived("your data");
        }
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      相关资源
      最近更新 更多