Service 服务

服务并不是运行在一个独立的进程当中的,而是依赖于创建服务时所在的应用程序进程,当某个应用程序进程被杀掉时,所依赖与该进程的服务也会停止

解析异步消息处理机制
1.Message
  在线程之间传递消息,在不同线程之间交换数据 what args1 args2  obj
2.Handle
   发送和处理消息 发送消息 sendMessage()  handleMessage()处理消息
3.MessageQueue() 
  消息队列,用于存放所有通过Handle发送发的消息,这部分消息会一直存在于消息队列中,每一个线程只会有一个MessageQueue对象
4.Looper
  调用Looper的loop()方法后,就会进入到一个无线循环当中,每个线程只会有一个Looper对象

AsyncTask(启动任务 new ..().execute()
AsyncTask指定三个泛型参数
1.Params 在执行AsyncTask时需要传入的参数,可用于在后台任务中使用
2.Progress 后台任务执行时如果需要显示进度,可以使用这个做为进度单位
3.Result 当任务执行完毕,如果需要对结果记性返回,则使用这里指定的泛型作为返回值类型

AsyncTask中的几个方法
1.onPreExecute()
在后台开始之前调用,用于界面初始化操作
2.doInBackground
 这个方法中的所有代码都在子线程中运行,任务一旦完成就可以通过return语句将任务的执行结果返回,如果AsyncTask的第三个泛型参数为void就可以不返回任何结果
3.onProgressUpdate(Pragress)
  当后台任务调用了publishProgress方法后这个方法就很快被调用方法中传递过来的参数就是后台任务中传递过来的,在这个方法中对UI进行操作
4.onPostExecute(Result)
  当后台任务执行完毕并通过return返回时,这个方法就很快被调用。返回的数据会作为参数出传递到此方法,可以利用返回的数据进行乙一些UI操作


服务的基本用法
public Class MyService extends Service{
  @Override
  public IBinder onBind(Intent intent){
    return null;
  }

  @Override
   puliv void onCreate(){
      super.onCreate();
  }

  @Override
  public int onStartCommand(Intent intent,int flags,int startId){
     return super.onStartCommand(intent,flags,startId);
  }

  @Override
  public void onDestory(){
    super.onDestory();
  }
}

启动和停止服务
Intent intent = new Intent(this,MyService.class);
startService(intent)//stopService(intent)
如果调用stopService方法,服务会一直运行,除非在服务类中stopSelf(),就可以让这个服务停下来

活动与服务的通信
eg
public class MyService extends Service{
  private DownloadBinder mBinder = new DownloadBinder();
  class DownloadBinder extends Binder{
      public void startDownload(){         
      }

      public int getProgress(){
          return 0;
      }
  }

  @Override
  public IBinder onBind(Intent intent){
     return mBinder;
    }
}
绑定和取消绑定监听
部分代码
private ServiceConnection connection = new ServiceConnection(){
  @Override
  public void onServiceDisconnected(ComponentName name){}

  @Overrode
  public void onServiceConnected(ComponentName name,IBinder service){ }
 
}

Intent bindIntent = new Intent(this,MyService.class);
bindService(bindIntent,connect,BIND_AUTO_CREATE);//绑定后  第三个参数表示活动与服务进行绑定后自动创建服务, 是的MyService中的onCreate()方法得到执行,但是onStartCommand()方法不会执行
unbindService(connection)

任何一个服务在整个应用程序范围内都是通用的,即MyService不急可以和MainActivity绑定,还可以和任何一个其他的活动进行绑定,而且在绑定完成后,都可以获得相同的Binder的实例

每个服务都只有一个实例,所以只需掉调一次stopService()或stopSelf()方法,服务就会停止

当一个服务既调用了startService又调用了bindService方法,必须让两个条件都不满足是服务才能销毁,所以要同时调用stopService和inbindService

使用IntentService
eg
  public class MyIntentService extends IntentService{
    public MyIntentService(){
        super("MyIntentService");  这里首先提供一个无参数的构造函数,并且必须调用父类的有参数的构造函数
    }

    @Override
    protected void onHandleIntent(Intent intent){//在线程中执行的
       
   }

   @Override
   public void onDestory(){
    super.onDestory();
  }
  }

你可能感兴趣的:(Service 服务)