安卓开启服务的方法

1.服务类:继承Service,实现onBind()方法返回IBinder对象,新建一个继承自Binder的内部类并在部内类的方法中返回活动服务交互的内容,定义一内部类对象,

public class BindService extends Service
{
   private int count;
   private boolean quit;
   // 定义onBinder方法所返回的对象
   private MyBinder binder = new MyBinder();
   // 通过继承Binder来实现IBinder类
   public class MyBinder extends Binder  // ①
   {
      public int getCount()
      {
         // 获取Service的运行状态:count
         return count;
      }
   }
   // 必须实现的方法,绑定该Service时回调该方法
   @Override
   public IBinder onBind(Intent intent)
   {
      System.out.println("Service is Binded");
      // 返回IBinder对象
      return binder;
   }
   // Service被创建时回调该方法
   @Override
   public void onCreate()
   {
      super.onCreate();
      System.out.println("Service is Created");
      // 启动一条线程,动态地修改count状态值
      new Thread()
      {
         @Override
         public void run()
         {
            while (!quit)
            {
               try
               {
                  Thread.sleep(1000);
               }
               catch (InterruptedException e)
               {
               }
               count++;
            }
         }
      }.start();
   }
   // Service被断开连接时回调该方法
   @Override
   public boolean onUnbind(Intent intent)
   {
      System.out.println("Service is Unbinded");
      return true;
   }
   // Service被关闭之前回调该方法
   @Override
   public void onDestroy()
   {
      super.onDestroy();
      this.quit = true;
      System.out.println("Service is Destroyed");
   }
}
 
 
2.活动类:新建一ServiceConnection对象在onServiceConnected中获取Service中的IBinder返回的Binder类,
	
public class MainActivity extends Activity
{
   Button bind, unbind, getServiceStatus;
   // 保持所启动的Service的IBinder对象
   BindService.MyBinder binder;
   // 定义一个ServiceConnection对象
   private ServiceConnection conn = new ServiceConnection()
   {
      // 当该Activity与Service连接成功时回调该方法
      @Override
      public void onServiceConnected(ComponentName name
            , IBinder service)
      {
         System.out.println("--Service Connected--");
         // 获取Service的onBind方法所返回的MyBinder对象
         binder = (BindService.MyBinder) service;  // ①
      }
      // 当该Activity与Service断开连接时回调该方法
      @Override
      public void onServiceDisconnected(ComponentName name)
      {
         System.out.println("--Service Disconnected--");
      }
   };
   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
      // 获取程序界面中的start、stop、getServiceStatus按钮
      bind = (Button) findViewById(R.id.bind);
      unbind = (Button) findViewById(R.id.unbind);
      getServiceStatus = (Button) findViewById(R.id.getServiceStatus);
      // 创建启动Service的Intent
      final Intent intent = new Intent(this, BindService.class);
      bind.setOnClickListener(new OnClickListener()//绑定按钮
      {
         @Override
         public void onClick(View source)
         {
            // 绑定指定Service
            bindService(intent, conn, Service.BIND_AUTO_CREATE);
         }
      });
      unbind.setOnClickListener(new OnClickListener()//取消绑定按钮
      {
         @Override
         public void onClick(View source)
         {
            // 解除绑定Service
            unbindService(conn);
         }
      });
      getServiceStatus.setOnClickListener(new OnClickListener()//获取服务交互内容的按钮
      {
         @Override
         public void onClick(View source)
         {
            // 获取、并显示Service的count值
            Toast.makeText(MainActivity.this,
                  "Service的count值为:" + binder.getCount(),
                  Toast.LENGTH_SHORT).show();  // ②
         }
      });
   }
}
启动流程:点击绑定按钮调用Context的bindService方法,传入Service的Intent和一个ServiceConnection对象,该ServiceConnection对象所在的类要重写
onServiceConnected()方法,因为这个方法在活动与服务连接的时间调用,它的IBinder参数service即为Service类中的返回与活动交互的Binder对象,将其赋值给
活动的BindService.MyBinder对象,此时由这个对象去调用Service内部的集成Binder类的MyBinder类的方法getCount()去获取与服务交互的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值