• 第8章 Service基础Activity与Service绑定


        要知道如果调用函数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停止服务。

  • 相关阅读:
    《SQL Server 2008从入门到精通》--20180628
    2019国赛
    [蓝桥杯2020] 湖北省省赛
    2019第十届蓝桥杯B组决赛题解第五题
    试题 算法提高 分解质因数
    大数相加减
    试题 算法提高 汉诺塔
    试题 算法提高 欧拉函数
    试题 算法提高 天天向上-dp
    算法训练 猴子吃包子-构造
  • 原文地址:https://www.cnblogs.com/lee0oo0/p/2390290.html
Copyright © 2020-2023  润新知