博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第8章 Service基础Activity与Service绑定
阅读量:6248 次
发布时间:2019-06-22

本文共 3789 字,大约阅读时间需要 12 分钟。

    要知道如果调用函数startService方法,那么即使你的程序退出了,但是Service依然运行在后台;也就是说此时想要停止service必须调用stopService方法。

    现在我们把Activity与Service绑定在一起,那就是Service要随着程序的退出而终止,此时调用的方法为bindService方法,方法如下:

    A. 编写需要运行在后台的类继承自android.app.Service。

      public class MyService extends Service {

        //服务生命周期 创建,开始,销毁

         /**
            * 创建
          */
         @Override
       public void onCreate() {
        // TODO Auto-generated method stub
          super.onCreate();
          Log.d("info", "Service Create");
         }
         /*
            * 开始
            * (non-Javadoc)
            * @see android.app.Service#onStart(android.content.Intent, int)
          */
       @Override
         public void onStart(Intent intent, int startId) {
          // TODO Auto-generated method stub
            super.onStart(intent, startId);
            Log.d("info", "Service Start");
           }
           /**
                * 销毁 
            */
        @Override
          public void onDestroy() {
          // TODO Auto-generated method stub
            super.onDestroy();
            Log.d("info", "Service Destroy");
           }

 

           /**

              * 当Service与Activity成功绑定时调用这个方法(non-Javadoc)
            * @see android.app.Service#onBind(android.content.Intent)
            */
         @Override
           public IBinder onBind(Intent arg0) {
            Log.d("info","Service Bind Success");
            return null;
            }
           /**
              * 重新绑定
            */
         @Override
           public void onRebind(Intent intent) { 
              super.onRebind(intent);
            Log.d("info","Service ReBind Success");
           }
           /**
              * 取消绑定
            */
         @Override
           public boolean onUnbind(Intent intent) {
             Log.d("info","Service Unbind Success");
            return super.onUnbind(intent);
            }
       }

 

    B.  在AndroidManifest.xml中配置<service>标签

      <service android:name=".MyService" android:enabled="true" ></service>

 

    

    C. 绑定服务:

      (1) 通过使用Activity的bindService(Intent service,ServiceConnection conn,int flags)完成

           由该方法的第二个参数可以确定第二步要做什么

      (2) 编写类实现ServiceConnection 接口

          class MyServiceConnection implements ServiceConnection

            {

            @Override

            public void onServiceConnected(ComponentName arg0, IBinder arg1) {
             Log.d("info", "Service Connection Success");
             //成功连接服务,该方法被执行。在该方法中可以通过IBinder对象取得onBind方法的返回值,一般通过向下转型

            }

            @Override

            public void onServiceDisconnected(ComponentName arg0) {
             // TODO Auto-generated method stub
             Log.d("info", "Service Connection Filed");
             //连接失败执行
            }
     
          }

        (3)使用

             class BtnClick implements OnClickListener

              {
              @Override
            public void onClick(View arg0) {
             Intent intent = new Intent(Main.this,MyService.class);   
             MyServiceConnection myServiceConnection = new MyServiceConnection();
             switch (arg0.getId()) {
               case R.id.btnStart:        
                  Main.this.startService(intent);
                  break;
               case R.id.btnStop:    
                  Main.this.stopService(intent);
                  break;
               case R.id.btnBind:
                   Main.this.bindService(intent,myServiceConnection ,Context.BIND_AUTO_CREATE);
                   break;  
               case R.id.btnUnBind:
                    //ServiceConnection必须是全局变量否则此处报错
                   Main.this.unbindService(myServiceConnection );
                    break;
               default:
                   break;
               }   
            }
     
            }

 

***开启service有两种方法,一种startService,另一种是bindService。如果两种方法同时使用的话,不论是先启用startService先还是启用bindService先,都需要先等待解除绑定服务再能调用stopService方法,程序才会自动回调destroy。不论是先启用startService先还是启用bindService先,然后再退出程序,以startService启动的服务忍然需要当程序再次启动后调用stopService停止服务。

转载地址:http://dxria.baihongyu.com/

你可能感兴趣的文章
《计算机网络:自顶向下方法(原书第6版)》一2.1 应用层协议原理
查看>>
《基于ArcGIS的Python编程秘笈(第2版)》——2.8 添加图层到地图文档
查看>>
Gmail 即将落实阻止 JavaScript 的安全策略
查看>>
【PMP认证考试之个人总结】第 10 章 项目风险管理
查看>>
从超模转职成为程序媛是一种怎样的体验
查看>>
《C++入门经典(第6版)》——1.2 编译和链接源代码
查看>>
五个改善你服务器日志的技术
查看>>
Using Big Data to Build Customer Loyalty
查看>>
在 Ubuntu 中使用 NTP 进行时间同步
查看>>
《七周七数据库》一一2.3 第2天:高级查询、代码和规则
查看>>
《Java EE 7精粹》—— 1.3 Java EE 7有什么新功能
查看>>
利用OpenVSwitch构建多主机Docker网络
查看>>
如何从 Ubuntu 14.04 升级到 Ubuntu 14.10
查看>>
Andrew Ng机器学习公开课笔记 – Factor Analysis
查看>>
Docker Swarm介绍
查看>>
天猫618的美妆黑马出现了,背后是“肉毒杆菌之父”
查看>>
《HTML5 Canvas开发详解》——2.6 在画布上合成
查看>>
《妙手回春:网站可用性测试及优化指南(修订版)》一开场白:管我叫以实玛利吧...
查看>>
screen 命令使用及示例
查看>>
《C++游戏编程入门(第4版)》——1.4 使用算术运算符
查看>>