Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 716|回复: 0

开发交流:Activity与Service通过广播交换复杂对象数据用法详

[复制链接]

该用户从未签到

发表于 2011-10-24 10:45:27 | 显示全部楼层 |阅读模式
最近学习新浪微博开放平台,实现了一个应用,通过后台Service监控微博数据,发现数据更新后通知前台程序,并将博客数据列表发送给前台Activity。
       其中利用BroadcastReceiver对象分别在Activity和Service注册了一个广播,通过发送不同的广播控制前台和后台的数据交换,并通过Serializable对象传递复杂的自定义对象类型给Activity。
       程序片段如下:后台监控weibo Service //继承自Service的子类
复制代码AndriodFocusMe 主UI界面Activity public class AndriodFocusMe extends Activity implements Runnable{

        /** Called when the activity is first created. */

    DataReceiver dataReceiver;//BroadcastReceiver对象



   

    ProgressBar progressbar;

   



    ListView listview;

   

    int CMD_STOP_SERVICE = 0;

    int CMD_RESET_SERVICE = 1;

    int CMD_GET_WEIBO_DATA = 2;

   

        @Override

        public void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);

                setContentView(R.layout.weibodataview);

               

            Button beginOuathBtn=  (Button) findViewById(R.id.Button_WeiBo);

            Button endBtn = (Button) findViewById(R.id.flashData);

            

            listview = (ListView)findViewById(R.id.weibodatalist);



            progressbar = (ProgressBar)findViewById(R.id.wbprogressbar);

            progressbar.setVisibility(View.INVISIBLE);



            beginOuathBtn.setOnClickListener(new Button.OnClickListener()

        {



            @Override

            public void onClick( View v )

            {            

                Intent myIntent = new Intent(AndriodFocusMe.this, WeiboService.class);

                AndriodFocusMe.this.startService(myIntent);//发送Intent启动Service

                progressbar.setVisibility(View.VISIBLE);

               

               

               



            }

        } );

            

            endBtn.setOnClickListener(new Button.OnClickListener()

        {



            @Override

            public void onClick( View v )

            {            

                     Intent intent = new Intent();//创建Intent对象

                 intent.setAction("weibo4andriod.focusme.weiboService");

                 intent.putExtra("cmd", CMD_GET_WEIBO_DATA);

                 sendBroadcast(intent);//发送广播

               



            }

        } );

   

            

        }

        

    private class DataReceiver extends BroadcastReceiver{//继承自BroadcastReceiver的子类

            

            ArrayList<HashMap<String, String>> weibodatalist;

                @Override

        public void onReceive(Context context, Intent intent) {//重写onReceive方法

                        

                        try {

                    Bundle bundle = intent.getExtras();

                    //反序列化,在本地重建数据

                    Serializable data = bundle.getSerializable("weibodata");

                    

                    if (data != null) {

                            weibodatalist = (ArrayList<HashMap<String, String>>)data;

                                       

                            SimpleAdapter mSchedule = new SimpleAdapter(AndriodFocusMe.this,weibodatalist,

                                         R.layout.weibodata_itemview,

                                         new String[] {"CreatedAt", "WeiBoText"},

                                         new int[] {R.id.title,R.id.weibotext});

                    

                             listview.setAdapter(mSchedule);



                    } else {

                        return;

                    }

                } catch (Exception e) {

                    Log.v("test", e.toString());

                }

                           progressbar.setVisibility(View.GONE);

               

        }               

        }

        @Override

        protected void onStart() {//重写onStart方法

                                //注册用于接收Service传送的广播

        dataReceiver = new DataReceiver();

        IntentFilter filter = new IntentFilter();//创建IntentFilter对象

        filter.addAction("weiboDataChanged");

        registerReceiver(dataReceiver, filter);//注册Broadcast Receiver

        NotificationManager m_NotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        m_NotificationManager.cancel(R.id.TextView01);

        super.onStart();



        }

        @Override

        protected void onStop() {//重写onStop方法

        unregisterReceiver(dataReceiver);

        finish();

        super.onStop();

        }



}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 07:58 , Processed in 0.328125 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表