【Service】android四大组件之Service

本文详细介绍了Android中的Service组件,包括如何创建一个简单的Service,Activity与Service之间的Intent和Binder通信方式,Service的多种销毁情况及其总结,以及Service如何将数据传递回Activity。通过对各种场景的分析,加深了对Service生命周期和交互的理解。
摘要由CSDN通过智能技术生成

前言:

写这篇文章主要目的只是为了加深印象。由于工作的缘故,平时最多遇到的都是Activity。其他三大组件使用频率极少。


本文阅读要点提醒:

1、一个简单的service的例子,了解service生命周期;

2、activity与service的通信的两种方式:Intent,Binder;

3、service与activtiy的通信(或者activity监听service内部变化);

4、servcie的销毁几种情况及总结;

阅读声明:水平有限,主要针对普通玩家,快速查看某一点请直接通过目录,高端玩家随意。


正文:

一、写一个简单的service例子。

目的:阅读此部分主要为了解service的生命周期,可跳过。官方的生命周期图如下:


看图说话:

上图分左右两列,

1.左边这一列即是一个简单service的生命周期。

2.全图结合右边则是一个与activity有交互紧密关联的service的生命周期。

先看代码一个简单service

(一):一个简单activity用于启动service

package com.example.user.simpleservice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void start(View view){
        startService(new Intent(this,SimpleService.class));
    }

    public void stop(View view){
        stopService(new Intent(this,SimpleService.class));
    }
}

对应的activity_main:略。

(二):一个简单service

package com.example.user.simpleservice;

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

public class SimpleService extends Service {
    private String TAG = getClass().getSimpleName();
    public SimpleService() {
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG,TAG+"--onCreate");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(TAG,TAG+"--onStartCommand");
        return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
        Log.d(TAG,TAG+"--onDestroy");
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

对应的在manifeist中写:略。

操作后log如下:

点击按钮【启动service】:

11-26 01:14:47.010 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onCreate
11-26 01:14:47.014 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand

再次点击【启动service】:

11-26 01:14:47.010 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onCreate
11-26 01:14:47.014 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
11-26 01:26:54.466 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand

可见多打一条日志startCommand

点击按钮【停止service】:

11-26 01:14:47.010 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onCreate
11-26 01:14:47.014 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
11-26 01:26:54.466 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onStartCommand
11-26 01:28:38.034 1537-1537/com.example.user.simpleservice D/SimpleService: SimpleService--onDestroy

再次点击【停止service】:与上面Log并没有区别。确认已经销毁了。

由此左边的一列生命周期解释很清晰了。


二、写一个activity与service绑定的(Binder)service例子

所谓紧密关联:即可进行数据交互:Activity传递数据到Service,Service传递数据到Activity。

(1)Activity传递数据到Service包含两种:

1.一种是传统的Intent传递数据到service,另一种则是通过Binder进行传递数据到Service。

2.一种是传统的Intent传递数据到service的升级版本Demo:

一种是传统的Intent传递数据到service

MainActivity.java:Activity两个按钮,一个启动service,一个销毁service。启动service时通过intent携带数据,传递给service。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值