zoukankan      html  css  js  c++  java
  • Android开发--Service和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();
        }

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

        

  • 相关阅读:
    解题:AHOI 2005 航线规划
    解题:SCOI 2008 天平
    解题:SCOI 2014 方伯伯运椰子
    解题:APIO 2008 免费道路
    解题:USACO15JAN Grass Cownoisseur
    669. 换硬币(dp动态规划)
    8. 旋转字符串
    147. 水仙花数
    1131. 排列中的函数
    78. 最长公共前缀
  • 原文地址:https://www.cnblogs.com/tangchun/p/9305135.html
Copyright © 2011-2022 走看看