【问题标题】:Sending Message from Service to Activity从服务发送消息到活动
【发布时间】:2013-02-08 04:37:42
【问题描述】:

我有一个服务,我尝试像这样向我的主要活动发送消息:

public void callAsynchronousTask() {
    final Handler handler = new Handler();
    Timer timer = new Timer();
    TimerTask doAsynchronousTask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    try {
                        Message m = new Message();
                        m.arg1 = 10;
                        m.arg2 = 15;
                        handler.sendMessage(m);
                        Log.i("Sent", "!");

                    } catch (Exception e) {}
                }
            });
        }

};
timer.schedule(doAsynchronousTask, 0, 3000); 
}

如何在我的 Activity 中获取此消息数据?

【问题讨论】:

    标签: android android-service android-handler


    【解决方案1】:

    在您的活动中,您应该像这样创建一个处理程序,并在启动之前将处理程序的引用传递给服务...

    handler = new Handler() {
      @Override
      public void handleMessage(Message msg) {
        //msg.arg1
      }
    };
    

    但是现在您正在服务中创建一个处理程序,但这不是您想要做的!

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 我的问题是如何从已发送的消息中获取数据
      • 此外,您应该尝试找出一种更好的方式让您的 Activity 与您的服务进行通信。
      • Jox 的方法正是您想要的。阅读Bound Services here - 你会看到你可以提供一个回调方法,在你的实例中可以公开一个getArgs(Integer...) 方法或更好的方法。 +1
      【解决方案3】:

      将您的数据放入message.obj 并从您活动的该字段中获取。您的数据可以是一个类,您可以定义您想要的方式。

      【讨论】:

      • 我需要Activity中的代码,我的问题是接收数据,而不是发送数据。
      • 让您的活动实现 Handler.Callback 并将您的代码放入方法 public boolean onMessage(Message message)
      【解决方案4】:

      simple example 项目(由CommonsWare 创建)显示如何通过Handler 将消息从Service 发送到Activity。看看吧

      【讨论】:

        【解决方案5】:
                //use this code to send data to activity
        
                 Bundle data = new Bundle();
                    data.putString("data", result);
                    Message msg = Message.obtain();
                    msg.setData(data);
                    replyTo.sendMessage(msg);        //replyTo is handler declared in your main_Activity 
        
        
        
        
        
        
            //Pass this **replyTo** handler when you call your service from mainActivity..
                  Handler replyTo= new Handler() {
                    public void handleMessage(Message msg) {
                    //get data here and do what you want..
                };
                };
        

        希望对您有所帮助..!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多