3711|6

3241

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

Service本地服务通信的问题 [复制链接]

本帖最后由 chenbingjy 于 2015-9-24 19:33 编辑


我在学习安卓,看书,第七章:服务与消息广播
本地服务通信。
新建了一个项目,布局文件里添加了三个按钮,一个启动Service,一个停止Service,一个获取数据。
定义了一个Service3子类,使它继承于Service类,主要代码如下:
public class Service3 extends Service {
        private int counter=0;
        private boolean bRunning=true;
        private mBinder binder=new mBinder();               //定义onBinder返回的对象
        
        public class mBinder extends Binder{                   //通过继承实现Binder类
                public int getCounter(){
                        return counter;
                }
        }
        @Override
        public IBinder onBind(Intent arg0){
               
                return binder;                                                      //返回IBinder对象
        }
        @Override
        public boolean onUnbind(Intent intent) {
                // TODO Auto-generated method stub
                return super.onUnbind(intent);
        }
        
        @Override
        public void onDestroy() {
                // TODO Auto-generated method stub
                super.onDestroy();
                bRunning = false;
        }
        @Override
        public void onCreate() {
                Exception e;
                // TODO Auto-generated method stub
                super.onCreate();
               
                new Thread(new Runnable() {                             //启动线程,修改counter值
                        
                        public void run() {                                             
                                // TODO Auto-generated method stub
                                 while (!bRunning) {
                            try {  
                                Thread.sleep(1000);
                            } catch (Exception e) {}  
                            counter++;
                                 }
                                
                                
                        }
                }) .start();         


        }
        
        
        
}

最新回复

[attach]216428[/attach]   详情 回复 发表于 2015-10-7 16:19
点赞 关注
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

回复
举报

3241

帖子

0

TA的资源

纯净的硅(高级)

沙发
 

在Manifest.xml文件中声明Service3,并配置子标签,设置Action属性,代码如下:

            
               
               
            

        


在MainActivity中声明一个Intent对象用于标识目标Service,声明一个Service3.mIbind对象用于获取数据,声明ServiceConnection并实现其方法,
用于监听访问者与Service之间的连接情况,代码如下:
private Intent intent=new Intent();
        private Service3.mBinder binder;
        private ServiceConnection sConnection=new ServiceConnection(){
                public void onServiceDisconnected(ComponentName name){
                        System.out.println("--ServiceDisconnected--");
                }
                public void onServiceConnected(ComponentName name,IBinder service){
                        
                        System.out.println("--ServiceConnected--");
                binder=(Service3.mBinder)service;
                }
        };
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
在MianActivity中,设置Intent所触发的Action字符串,声明3个Button控件并绑定监听,第一个用于启动Service,第二个用于停止Service,
第三个用于获取数据并使用Toast显示信息,代码如下:
setContentView(R.layout.activity_main);
                String ccb;
                intent.setAction("android.service");
               
                ccb=this.getPackageName();
                intent.setPackage(ccb);
                Button button1=(Button)findViewById(R.id.button1);
                button1.setOnClickListener(new OnClickListener(){
                        public void onClick(View v){
                        
                                bindService(intent,sConnection,BIND_AUTO_CREATE);
                                
                        }
                });
                Button button2=(Button)findViewById(R.id.button2);
                button2.setOnClickListener(new OnClickListener(){
                        public void onClick(View v){
                                unbindService(sConnection);
                        }
                });
                Button button3=(Button)findViewById(R.id.button3);
                button3.setOnClickListener(new OnClickListener(){
                        public void onClick(View v){
                                Toast.makeText(MainActivity.this,
                                                "Service的counter值为"+binder.getCounter(),
                                                Toast.LENGTH_LONG).show();
                        }
                });
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

4
 
可是,我运行时点击第一个按钮,出错,见附件。请高手指教,怎么解决?谢谢!
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

5
 
完全不懂,帮顶
有空也学学
是谷歌的官方环境么?
 
个人签名

So TM what......?

 

 

回复

3241

帖子

0

TA的资源

纯净的硅(高级)

6
 
eclipse
 
个人签名为江山踏坏了乌骓马,为社稷拉断了宝雕弓。
 
 

回复

1891

帖子

2

TA的资源

纯净的硅(中级)

7
 


 
个人签名
分享铸就美好未来。。。




 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表