Service

服务需要在清单文件中注册
Started service
1.服务同时只会被创建一次,可以通过外部调用Stopservice来终止服务
2.当执行一个已启动的服务,会直接调用onStartCommand方法来执行业务
3.默认情况下服务与主线程在同一线程下,所有会执行主线程,服务里面调用线程
4.使用startService启动的服务,如果不关闭,会一直在后台运行

onStartCommand会返回一个整形,返回四个值
1.START_STICKY 当服务被kill掉,会重启服务,粘性的 不保留传递的intent对象
2.START_NOT_STICKY 非粘性的 如果被kill掉,不会重启服务
3.START_REDELIVER_INTENT 如果服务被异常kill掉 重传intent对象,
4.START_STICKY_COMPATIBILITY 是START_STICKY兼容版本,但保证服务重启

IntentService
IntentService是继承于Service并处理异步请求的一个类,在IntentService内有一个工作线程来处理耗时操作
,启动Intentservice和启动Service一样,同时,执行完任务后,它会自动停止服务,不需要手动关闭。
它可以启动多次,每一个耗时操作都会排成一列,一个执行完再执行另一个

启动和关闭一个简单的服务示例:

//启动一个服务
    public void StartServer(View v){
        Intent intent=new Intent(this,MyServer.class);
        //intent.putExtra("tag", "扶朕起来,朕还能学");
        startService(intent);
    }

    //关闭一个服务
    public void StopServer(View v){
        Intent intent=new Intent(this,MyServer.class);
        stopService(intent);
        //停止服务时会调用ondestory()方法
    }

服务类

public class MyServer extends Service{

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        String st = intent.getStringExtra("tag");
        Log.i("打印",st);
        Toast.makeText(getApplicationContext(), st, 1).show();
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onDestroy() {
        Log.i("打印","服务已销毁");
        super.onDestroy();
    }

}

注册服务

 <service
            android:name=".MyServer"
            android:enabled="true"
            android:exported="true" >
        </service>
        <service
            android:name=".IntentServiceTest"
            android:enabled="true"
            android:exported="false" >

            <!-- exported  内部可以访问 -->
        </service>

一个Intentservice示例(上面已注册):

public class IntentServiceTest extends IntentService{
    public IntentServiceTest() {
        super("IntentServiceTest");
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub
        String st = intent.getStringExtra("tag");
        Log.i("打印",st);
        for(int i=0;i<50;i++){
            System.out.println(i+Thread.currentThread().getName());
        }
    }

}

启动一个Intentservcice

  public void StatIntentService(View v){
        Intent intent=new Intent(this,IntentServiceTest.class);
        intent.putExtra("tag", "扶朕起来");
        startService(intent);
        //停止服务时会调用ondestory()方法
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值