Android的Service也运行在主线程,但是在服务里面是没法直接调用更改UI,如果需要服务传递消息给Activity,通过广播是其中的一种方法:

  一、在服务里面发送广播

    通过intent传送数据、通过setAction 设置Activity接收广播时要过滤的动作名   

 Intent intent = new Intent();
intent.putExtra("key", "test");
intent.setAction("location.reportsucc");
sendBroadcast(intent);

  

  二、在Activity中创建内部类做为广播接收器,需实现BroadcastReceiver

 //内部类,实现BroadcastReceiver
public class LocationReceiver extends BroadcastReceiver {
//必须要重载的方法,用来监听是否有广播发送
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (intentAction.equals("location.reportsucc")) { }
}
}

  三、在Activity创建时注册广播接收器,

filter.addAction值必须和服务里面注册的Action名称一致
 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home); locationReceiver = new LocationReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("location.reportsucc");
registerReceiver(locationReceiver, filter);
}

  四、最后记住在不需要广播接收器的时候,卸载广播接收器。例如在Activity销毁时卸载广播接收器

  

    @Override
protected void onDestroy() {
unregisterReceiver(locationReceiver);
super.onDestroy();
}

    总结:通过发送广播,是一种实现了服务和活动之间互相通信的方式。

    

Android开发--Service和Activity通过广播传递消息的更多相关文章

  1. Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解

    前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...

  2. Android开发之入口Activity

    Android开发之入口Activity Adnroid App是怎样确定入口Activity的? 难道就由于class的类名叫MainActivity,布局文件叫activity_main.xml? ...

  3. Android开发学习之路-该怎么学Android(Service和Activity通信为例)

    在大部分地方,比如书本或者学校和培训机构,教学Android的方式都基本类似,就是告诉先上原理方法,然后对着代码讲一下. 但是,这往往不是一个很好的方法,为什么? ① 学生要掌握这个方法的用途,只能通 ...

  4. android开发中的 Activity 与 Context 区别与联系

    Context 是 Application /Activity /Service的基类 Intent(Context , Class); Activity中的上下文Context是随着活动的产生而产生 ...

  5. Android开发学习之Activity的简介

    1.Activity的概念介绍 Activity是Android组件中最基本也是最常用的一种组件,在一个Android应用中,一个Activity通常就是一个单独的屏幕.每一个Activity都被实现 ...

  6. Android开发常见的Activity中内存泄漏及解决办法

    上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法.本文将会以“为什么”“怎么解决”的方式来介绍这几种内存泄漏. ...

  7. Android开发中在一个Activity中关闭另一个Activity

    比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 Ac ...

  8. Android开发-API指南-<activity>

    <activity> 英文原文:http://developer.android.com/guide/topics/manifest/activity-element.html 采集(更新 ...

  9. Android中Service和Activity之间的通信

    启动Service并传递数据进去: Android中通过Intent来启动服务会传递一个Intent过去. 可以在Intent中通过putExtra()携带数据 Intent startIntent ...

随机推荐

  1. leetcode — edit-distance

    /** * Source : https://oj.leetcode.com/problems/edit-distance/ * * * Given two words word1 and word2 ...

  2. Spring之BeanPostProcessor(后置处理器)介绍

      为了弄清楚Spring框架,我们需要分别弄清楚相关核心接口的作用,本文来介绍下BeanPostProcessor接口 BeanPostProcessor   该接口我们也叫后置处理器,作用是在Be ...

  3. OpenCV入门之获取图像的旋转角度

      在我们的日常生活中,所碰到的图像往往都有一定的倾斜.那么,如何用OpenCV来获取图像的旋转角度呢?   我们以下面的图片为例,简单介绍如何用OpenCV来获取图像的旋转角度.   可以看到,该图 ...

  4. Linux-bc命令(21)

    bc 命令是任意精度计算器语言,通常在linux下当计算器用. 它类似基本的计算器, 使用这个计算器可以做基本的数学运算. bc支持运算有以下几种: + - * / % :加,减,乘,除,取余 a^b ...

  5. canvas-a12ellipse.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. canvas-7globleCompositeOperation.html

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. es6 语法 (let 和const)

    一.let 和const 1.let 只在自己声明的块作用域中有效: function test(){ let a = 'a'; var b = 'b'; for(let i =1;i<3;i+ ...

  8. js的map遍历和array遍历

    1. array遍历: [1].forEach() forEach是ES5中操作数组的一种方法,主要功能是遍历数组.forEach方法中的function回调有三个参数:第一个参数是遍历的数组内容,第 ...

  9. 一种快速构造和获取URL查询参数的方法:URLSearchParams

    URLSearchParams 接口定义了一些实用的方法来处理 URL 的查询字符串. URLSearchParams()是个构造函数,将返回一个可以操作查询字符串的对象. 常用方法: 1.构造查询字 ...

  10. 【代码笔记】Web-JavaScript-JavaScript 条件语句

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...