Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 605|回复: 0

[实例教程]Android小项目之--服务【Service】

[复制链接]

该用户从未签到

发表于 2011-10-22 13:26:41 | 显示全部楼层 |阅读模式
Service 简介
何谓“Service”?“Service” 意思即“服务”的意思, 像 Windows 上面的服务一样,有些服务是在后台上运行,干着静悄悄的勾当不让人知道 。与 Activity 不同,Service 是并不直接与用户交互的运行于后台的一类组件。


  Google对Service的解释
一个服务不是一个单独的进程。服务对象本身并不意味着它是在自己的进程中运行,除非另有规定,否则它与运行程序是同在一个进程中。
一个服务不是一个单独的线程。它是一种手段,本身做着主线的工作 (以避免应用程序没有响应的错误)。

  Service 与 Activity 的相同点与不同点
不同点:Activity是与用户交互的组件,即我们用眼睛可以看到的界面,而Service是在后台运行,执行隐藏的动作。
相同点:使用Activity 时我们需要在配置文件中声明<activity>标签,同样的使用Service 也需要在配置文件中声明<service>标签

  使用Service
创建Service需要继承自 android.app.Service 的类,然后重新实现在Service各个状态要回调的方法,Service的回调方法有三个,分别是:
onCreate()
创建
onStart()
开始
onDestry()
释放

注意:Service是不能自己启动的,只有通过 Context 对象 调用startService和bindService方法来启动。但两种方法的Service生命周期是不同的,下面我们通过一个小例子来区别各自的生命周期。
例子效果图如下:

代码如下:

package com.terry;



import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.util.Log;



public class ServiceSample extends Service {



    final String TAG="Service";

    @Override

    public IBinder onBind(Intent intent) {

        // TODO Auto-generated method stub

        Log.i(TAG,"onBind");

        return null;

    }

   

    @Override

    public boolean onUnbind(Intent intent) {

        // TODO Auto-generated method stub

        Log.i(TAG, "onUnbind");

        return super.onUnbind(intent);

    }



    @Override

    public void onRebind(Intent intent) {

        // TODO Auto-generated method stub

        super.onRebind(intent);

        Log.i(TAG, "onRebind");

    }

    @Override

    public void onCreate() {

        // TODO Auto-generated method stub

        super.onCreate();

        Log.i(TAG, "onCreate");

    }

    @Override

    public void onDestroy() {

        // TODO Auto-generated method stub

        super.onDestroy();

        Log.i(TAG, "onDestroy");

    }

   

    @Override

    public void onStart(Intent intent, int startId) {

        // TODO Auto-generated method stub

        super.onStart(intent, startId);

        Log.i(TAG, "onStart");

    }

   

}

当调用startService方法时:
1、若Servcie没有启动,则首先会调用该Service的onCreate方法,然后再调用onStart方法。
2、若Service己经启动则首先会直接调用onStart方法,
3、关闭时使用stopservice来关闭。


当调用bindService方法时:
1、若Service没有启动,则首先调用onCreate方法,来初始化启动Service,然后调用Service的onBind。
2、通过onUnbind和onDestry方法停止Service运行。


下面通过一组图来更详细的说明Service的生命周期  

开始服务



停止服务


绑定服务


销毁服务

音乐服务DEMO通过上面的小例子可能有些园友还是很模糊,下面通过一个播放音乐的小例子加深大家对Service 的理解,该例子通过播放一首mp3 ,当用户点击开始“按钮”,音乐开始播放,即时你退出程序音乐也会播放,点击“停止”按钮,停止播放音乐 。该例子继承service 然后重写onStart播放音乐 重写onDestry停止音乐 ,代码如下: package com.terry;



import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.IBinder;



public class musicServer extends  Service {



    private MediaPlayer player;

    @Override

    public IBinder onBind(Intent intent) {

        // TODO Auto-generated method stub

        return null;

    }

   

    @Override

    public void onStart(Intent intent, int startId) {

        // TODO Auto-generated method stub

        super.onStart(intent, startId);

    if(player==null)

    {

        player=MediaPlayer.create(this, R.raw.start);

        player.start();

    }

    }

   

    @Override

    public void onDestroy() {

        // TODO Auto-generated method stub

        super.onDestroy();

        player.stop();

    }

}
完成了service类,我们只要在对应的Activity的事件中调用服务即可实现,代码如下: package com.terry;



import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;



public class musicActivity  extends Activity{



    private Intent intent=new Intent("com.terry.Android.MUSIC");

   

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        // TODO Auto-generated method stub

        super.onCreate(savedInstanceState);

        setContentView(R.layout.music);

        findView();

        viewHolder.myButton.setOnClickListener(new OnClickListener() {

            

            @Override

            public void onClick(View v) {

                // TODO Auto-generated method stub

                startService(intent);

            }

        });

        

        viewHolder.myButton2.setOnClickListener(new OnClickListener() {

            

            @Override

            public void onClick(View v) {

                // TODO Auto-generated method stub

                stopService(intent);

            }

        });

    }

   

   

    void findView(){

        viewHolder.myButton=(Button)findViewById(R.id.play);

        viewHolder.myButton2=(Button)findViewById(R.id.stop);

    }

}

运行效果图:




差不多就到这里吧,有点晚了,把源码提供给大家:  ServiceTestDemo.rar (51.64 KB, 下载次数: 14)
回复

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:26:52 | 显示全部楼层

Re:[实例教程]Android小项目之--服务【Service

不错不错!
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2011-10-22 13:26:56 | 显示全部楼层

Re:[实例教程]Android小项目之--服务【Service

好东西,好好学习
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2011-10-22 13:27:01 | 显示全部楼层

Re:[实例教程]Android小项目之--服务【Service

学习学习
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-22 18:10 , Processed in 0.416462 second(s), 45 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表