Android开发--Service和Activity通过广播传递消息
程序员文章站
2022-04-17 20:03:14
Android的Service也运行在主线程,但是在服务里面是没法直接调用更改UI,如果需要服务传递消息给Activity,通过广播是其中的一种方法: 一、在服务里面发送广播 通过intent传送数据、通过setAction 设置Activity接收广播时要过滤的动作名 二、在Activity中创建 ......
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中)
-
Android开发--Service和Activity通过广播传递消息
-
Android 入门第十讲02-广播(广播概述,使用方法(系统广播,自定义广播,两个activity之间的交互和传值),EventBus使用方法,数据传递,线程切换,Android的系统广播大全)
-
Android实现音乐播放进度条传递信息的两种方式(在service和activity中)
-
(Android数据传递)Service和Activity之间-- 借助BroadcastReceiver--的数据传递
-
Android开发--Service和Activity通过广播传递消息
-
Android模块开发-----用户信息模块(Fragment和Activity之间数据的传递)