Android中的Service

Service并没有实际界面,而是一直在Android系统的后台运行。一般使用Service为应用程序提供一些服务,或不需要界面的功能,例如,从Internet下载文件、控制Video播放器等。本节主要介绍Service的启动和结束过程(Service的生命周期)以及启动Service的各种方法。 


一个服务实际上是一个继承android.app.Service的类,当服务经历上面3个阶段后,会分别调用Service类中的3个事件方法进行交互,这3个事件方法如下: 
1. public void onCreate();                     //  创建服务    2. public void onStart(Intent intent, int startId);            //  开始服务   3.  public void onDestroy();                        //  销毁服务
一个服务只会创建一次,销毁一次,但可以开始多次,因此,onCreate和onDestroy方法只会被调用一次,而onStart方法会被调用多次。


在MyService中覆盖了Service类中3个生命周期方法,并在这些方法中输出了相应的日志信息,以便更容易地观察事件方法的调用情况。  读者在编写Android的应用组件时要注意,不管是编写什么组件(例如,Activity、Service等),都需要在AndroidManifest.xml文件中进行配置。MyService类也不例子。配置这个服务类很简单,只需要在AndroidManifest.xml文件的<application>标签中添加如下代码即可:  1.  <service android:enabled="true"
 android:name=".MyService" />   其中android:enabled属性的值为true,表示MyService服务处于激活状态。

Android的service里面的函数可以写成公用的方法在Activity里面调用StartService这些命令 是调用service的生命周期 但是服务与静态的方法是有区别的 服务是可以单独在后台运行的,可以与之前的activity无关 而如果你用静态的方法,activity如果关闭了,那你的方法也结束

如果把Activity比喻为前台程序,那么Service就是后台程序,Service的整个生命周期都只会在后台执行。Service跟 Activity一样也由Intent调用。在工程里想要添加一个Service,先新建继承Service的类,然后到 AndroidManifest.xml -> Application ->Application Nodes中的Service标签中添加。

Service要由Activity通过startService 或者 bindService来启动,Intent负责传递参数。

startService与bindService都可以启动Service,那么它们之间有什么区别呢?它们两者的区别就是使Service的周期改变。由 startService启动的Service必须要有stopService来结束Service,不调用stopService则会造成 Activity结束了而Service还运行着。bindService启动的Service可以由unbindService来结束,也可以在 Activity结束之后(onDestroy)自动结束。

先看一下运行截图:

service.jpg (10.82 KB)
2012-8-24 09:51

main.xml

复制内容到剪贴板
代码:
<?xml version="1.0" encoding="utf-8"?>
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        androidrientation="vertical" android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnStartMyService"
                android:text="StartMyService"></Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnStopMyService"
                android:text="StopMyService"></Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnBindMyService"
                android:text="BindMyService"></Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnUnbindMyService"
                android:text="UnbindMyService"></Button>
        <Button android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btnExit"
                android:text="退出程序"></Button>
< /LinearLayout>

TestService.java

复制内容到剪贴板
代码:
package com.testService;

import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class TestService extends Activity {
    Button btnStartMyService,btnStopMyService,btnBindMyService,btnUnbindMyService,btnExit;
    @override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btnStartMyService=(Button)this.findViewById(R.id.btnStartMyService);
        btnStartMyService.setOnClickListener(new ClickEvent());
         
        btnStopMyService=(Button)this.findViewById(R.id.btnStopMyService);
        btnStopMyService.setOnClickListener(new ClickEvent());
         
        btnBindMyService=(Button)this.findViewById(R.id.btnBindMyService);
        btnBindMyService.setOnClickListener(new ClickEvent());
         
        btnUnbindMyService=(Button)this.findViewById(R.id.btnUnbindMyService);
        btnUnbindMyService.setOnClickListener(new ClickEvent());
         
        btnExit=(Button)this.findViewById(R.id.btnExit);
        btnExit.setOnClickListener(new ClickEvent());
    }
    @override
    public void onDestroy()
    {
            super.onDestroy();
            Log.e("Activity","onDestroy");
    }
     
    private ServiceConnection _connection = new ServiceConnection() {
                @override
                public void onServiceConnected(ComponentName arg0, IBinder arg1) {
                        // TODO Auto-generated method stub
                }

                @override
                public void onServiceDisconnected(ComponentName name) {
                        // TODO Auto-generated method stub
                }
    };
    class ClickEvent implements View.OnClickListener{

                @override
                public void onClick(View v) {
                        Intent intent=new Intent(testService.this,MyService.class);
                        if(v==btnStartMyService){
                                testService.this.startService(intent);
                        }
                        else if(v==btnStopMyService){
                                testService.this.stopService(intent);
                        }
                        else if(v==btnBindMyService){
                                testService.this.bindService(intent, _connection, Service.BIND_AUTO_CREATE);
                        }
                        else if(v==btnUnbindMyService){
                                if(MyService.ServiceState=="onBind")//Service绑定了之后才能解绑
                                        testService.this.unbindService(_connection);
                        }
                        else if(v==btnExit)
                        {
                                testService.this.finish();
                        }
                        
                }
            
    }
}

MyService.java

复制内容到剪贴板
代码:
package com.testService;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class MyService extends Service {
    static public String ServiceState="";
    @override
    public IBinder onBind(Intent arg0) {
        Log.e("Service", "onBind");
        ServiceState="onBind";
        return null;
    }
    @override
    public boolean onUnbind(Intent intent){
        super.onUnbind(intent);
        Log.e("Service", "onUnbind");
        ServiceState="onUnbind";
        return false;
         
    }
    @override
    public void onCreate(){
        super.onCreate();
        Log.e("Service", "onCreate");
        ServiceState="onCreate";
    }
    @override
    public void onDestroy(){
        super.onDestroy();
        Log.e("Service", "onDestroy");
        ServiceState="onDestroy";
    }
    @override
    public void onStart(Intent intent,int startid){
        super.onStart(intent, startid);
        Log.e("Service", "onStart");
        ServiceState="onStart";
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值