zoukankan      html  css  js  c++  java
  • Android中的广播机制

          有的时候,在一个Activity之外要对这个Activity的UI进行更新,例如,当外界的参数变化引起这个Activity相应的变化,这种情况下,我们可以采用广播机制:在变量发生变化的地方,向需要接收的Activity或其他Android应用组件发送一个广播消息。下面有个Demo,展示了这种消息机制:

           首先启动的是Activity中注册一个广播:

    //广播监听类
        class MyReceiver extends BroadcastReceiver{
     
            @Override
            public void onReceive(Context context, Intent intent) {
                int color = intent.getExtras().getInt("color");
                Log.v("tag", "receive color: " + color);
                drawColor(color);
            }
            
        }
        
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            receiver = new MyReceiver();
            IntentFilter filter = new IntentFilter();
            filter.addAction("ChangeColor");
            registerReceiver(receiver, filter);
            btnStartB = (Button) findViewById(R.id.btnStartB);
            textView = (TextView) findViewById(R.id.textView);
            
            btnStartB.setOnClickListener(new OnClickListener() {
     
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(FirstActivity.this,
                            SecondActivity.class);
                    startActivity(intent);
                }
            });
        }
     
        
        
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unregisterReceiver(receiver);   //取消注册
        }
     
     
     
        public void drawColor(int c) {
            int color = c;
            Log.v("tag", "receive: " + color);
            switch (color) {
            case 0:
                textView.setBackgroundColor(Color.RED);
                break;
            case 1:
                textView.setBackgroundColor(Color.YELLOW);
                break;
            case 2:
                textView.setBackgroundColor(Color.BLUE);
                break;
            }
            textView.invalidate();   //更新UI
        }

        在第二个Activity中,有三个按钮,代表三种不同的颜色值,每次点击一个按钮,则发出广播,通知ActivityA进行更新UI。

    发送广播的代码如下:

            Intent intent = new Intent("ChangeColor");
            intent.putExtra("color", c);
            sendBroadcast(intent);

    Demo的效果如下:

    (1)

    QQ截图20111013161820

    (2)

     QQ截图20111013162133    

    (3)

    QQ截图20111013162049

  • 相关阅读:
    一次linux启动故障记录
    linux 时间相关的一些总结
    linux 3.10 gro的理解和改进
    linux 3.10 的中断收包笔记
    一个有趣的nginx问题引发的小问题
    linux 3.10 tcp的accept测试
    linux mce的一些相关内容和用户态监控的设计方法
    C/C++(基础-运算符详解)
    C/C++(基础-常量,类型转换)
    C/C++(基础编码-补码详解)
  • 原文地址:https://www.cnblogs.com/yangzhenyu/p/2210438.html
Copyright © 2011-2022 走看看