service

android

2013-12-17 11:44

主要是一个长时间的后台操作,但是不会提供一个UI界面。

打开或者关闭应用,服务也不会关闭。


有启动式服务和绑定式服务

 <service android:name=".myservice"></service>

    </application>

启动式服务

--------------------------------------------------------------------------------------------------------------

首先 新建一个类  继承 Service 

public class myservice extends Service {


}


覆盖实现

onCreate 数据初始化 创建后只会执行一次

onStartCommand    再次创建会重复执行

onDestroy  资源回收  

 在   <application> 中加入 

<service android:name=".myservice"></service>

 

生命周期是 onCreate onStartCommand  onDestroy


Intent i=new Intent(MainActivity.this, myservice.class);

startService(i); 来启动服务


Intent i=new Intent(MainActivity.this, myservice.class);

stopService(i); 来关闭服务


类本身可以调用 stopself()停止服务

也可以intent传入参数   在onStartCommand里获取


Service运行在主线程。 在里面执行操作需要在新开线程。


//获得文件路径

File file=Environment.getExternalStorageDirectory(); 

//判断sdk是否挂载

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){


}

HttpClient.getConnectionManager().shutdown();结束后关闭连接


IntentService

同上继承IntentService的类

实现OnHandleIntent方法  主题内容

1 不需要开线程 (自己就开启了一个新线程)

2 不需要关闭,它自己关闭

3 适合一个单线程下载数据


绑定式服务

-----------------------------------------------------------------------------------------------

先继承Service 


现实覆盖方法IBinder  在返回Bind对象  在类的内部新建一个LocalBinder继承Bind类做为返回值 然后把本身返回回去

public class myservice extends Service {  

     private Binder Bind=new LocalBinder();  //新建一个类 座位返回值

     @Override

     public IBinder onBind(Intent arg0) {

         return Bind;                     //返回

     }


        //客户端调用

         public int add(int i,int k){

             return i+k;

         }

     public class LocalBinder extends Binder{

         //返回实例给客户端调用

         public myservice getMyservice(){

             return myservice.this;   //把本类回返

         }     

     }

}



在avciti 建立ServiceConnection  并实现2个内部方法

private myservice myservice100;

private ServiceConnection Connection =new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

// 链接断开

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

// 开始链接

LocalBinder b=(LocalBinder)service;

myservice100=b.getMyservice();

}

};


绑定 

Intent i=new Intent(MainActivity.this, myservice.class);

bindService(i, Connection, Context.BIND_AUTO_CREATE);

接触绑定

unbindService(Connection);

调用

int s=myservice100.add_num(1,6);



-----service--------thread--------------------------------------------

service是在后台运行的,切换至其它APP时,只要不销毁启动service的Activity,service会一直运行。

多线程是跟主线程同时运行的,主线程Activiy切换时,这些线程都会停止运行