您的位置:首页 > 移动开发 > Android开发

android学习--------Service

2015-09-30 16:29 381 查看
一 Service是什么及不是什么

     Service是什么:Service是能够在后台长时间运行操作并且不提供用户界面的应用程序组件。其他应用组件能启动服务,并且即使用户切换到另一个应用程序,服务还可以在后台运行。

    Service不是什么:官方文档解释如下

 

Service不是一个单独的进程。 

Service不是一个线程。    

二 Service的分类

(1)Started(启动):当应用程序组件(如Activity)通过调用StartService()方法启动服务时,服务处于Started状态。一旦启动,服务能在后台无限期运行,即使启动他的组件已经被销毁。

 (2)Bound(绑定):当应用程序组件通过调用bindService()方法绑定到服务时,服务处于bound状态。绑定服务提供客户端--服务器接口,以允许组件与服务交互、发送请求、获得结果,甚至使用进程间通信(IPC)跨进程完成这些操作。仅当其他应用程序组件与之绑定时,绑定服务才运行。多个组件可以一次绑定到一个服务上,当他们都解绑定时,服务被销毁。

  例1: 继承Service输出当前时间

      (1)布局文件一个按钮,按下输出当前时间。

     (2)创建CurrentTimeService类,它继承了Service

             <span style="font-size:14px;">public class CurrentTimeService extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Time time = new Time(); //创建Time对象
time.setToNow(); //设置时间为当前时间
String currentTime = time.format("%Y-%m-%d %H:%M:%S");//设置时间格式
Log.i("Currenttime",currentTime);
return START_STICKY;
}

}</span>

       (3)

 <span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
private Button currentTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentTime = (Button) findViewById(R.id.currentTime);
currentTime.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CurrentTimeService.class);
startService(intent);

}
});
}

}</span>

      (4)最后要在配置文件中增加Service配置

        <span style="font-size:14px;"><service android:name=".CurrentTimeService"></service></span>
     例2:继承Binder类绑定服务显示时间

   (1)布局文件一个按钮,按下输出当前时间。

 (2)创建CurrentTimeService类,它继承了Service类。内部类LocalBinder继承了Binder类,用于返回CurrentTimeService类的对象。getCurrentTime()方法用于返回当前时间。

         <span style="font-size:14px;">public class CurrentTimeService extends Service{
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder{
CurrentTimeService getService(){
//返回当前服务的实例
return CurrentTimeService.this;
}

}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
public String getCurrentTime() {

Time time = new Time();
time.setToNow();
String currentTime = time.format("%Y-%m_%d %H:%M:%S");
return currentTime;

}

}</span>

   (3)

      <span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
CurrentTimeService cts;
boolean bound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Button currentTime = (Button) findViewById(R.id.currentTime);
currentTime.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CurrentTimeService.class);
bindService(intent, conn,BIND_AUTO_CREATE); //绑定服务
if (bound) { //如果绑定则显示当前时间
Toast.makeText(MainActivity.this,cts.getCurrentTime(),Toast.LENGTH_LONG).show();
}
}
});
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (bound) {
bound = false;
unbindService(conn); //解绑定
}
}

private ServiceConnection conn = new ServiceConnection() {

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
bound = false;
}

@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder)service; //获得自定义的LocalBinder
cts = binder.getService(); //获得CurrentTimeService对象
bound = true;
}
};

}
</span>

(4)在配置文件中添加

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

三 官方API----------点击打开链接

 

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: