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();
        }

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

        

  • 相关阅读:
    Spring 声明式事务管理(11)
    Spring JdbcTemplate详解(9)
    Spring 基于xml配置方式的AOP(8)
    Spring AspectJ 切入点语法详解(7)
    Spring 基于Aspectj切面表达式(6)
    spring AOP 编程--AspectJ注解方式 (4)
    Spring 切面优先级(5)
    Spring 泛型依赖注入(3)
    python反射/自省 (目前是转载)
    flask_requirements
  • 原文地址:https://www.cnblogs.com/tangchun/p/9305135.html
Copyright © 2011-2022 走看看