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

【转】 Android学习笔记(21…

2015-12-26 20:44 447 查看
转自:http://blog.csdn.net/moruna/article/details/7882381

1、Service介绍

官方解释:A 
Service
 isan
application component that can perform long-running operationsin the background and does not provide a user interface. Anotherapplication component can start a service and it will continue torun in the background even if the user switches to anotherapplication

也就是说Service是一个没有提供用户界面而能够提供在后台运行的构件,其他应用能启动一个Service,即使是切换到其他的应用它还能在后台运行。

2、Service的生命周期

AndroidService的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。

3、下面举个播放音乐的例子:

首先在res创建目录raw,然后在里面添加MP3文件

继承一个Service类:

 

[java] view plaincopy

package com.Moruna.studys;  

  

import android.app.Service;  

import android.content.Intent;  

import android.media.MediaPlayer;  

import android.os.IBinder;  

  

public class MyService extends Service {  

    private MediaPlayer mp;  

  

    @Override  

    public void onCreate() {  

        // TODO Auto-generated method stub  

        // 初始化音乐资源  

        try {  

            System.out.println("create player");  

            // 创建MediaPlayer对象  

            mp = new MediaPlayer();  

            mp = MediaPlayer.create(MyService.this, R.raw.alarm);  

            // mp.prepare();  

        } catch (IllegalStateException e) {  

            // TODO Auto-generated catch block  

            e.printStackTrace();  

        }  

        super.onCreate();  

    }  

  

    @Override  

    public void onStart(Intent intent, int startId) {  

        // TODO Auto-generated method stub  

        // 开始播放音乐  

        mp.start();  

        // 音乐播放完毕的事件处理  

        mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {  

  

            public void onCompletion(MediaPlayer mp) {  

                // TODO Auto-generated method stub  

                // 循环播放  

                try {  

                    mp.start();  

                } catch (IllegalStateException e) {  

                    // TODO Auto-generated catch block  

                    e.printStackTrace();  

                }  

            }  

        });  

        // 播放音乐时发生错误的事件处理  

        mp.setOnErrorListener(new MediaPlayer.OnErrorListener() {  

  

            public boolean onError(MediaPlayer mp, int what, int extra) {  

                // TODO Auto-generated method stub  

                // 释放资源  

                try {  

                    mp.release();  

                } catch (Exception e) {  

                    e.printStackTrace();  

                }  

  

                return false;  

            }  

        });  

  

        super.onStart(intent, startId);  

    }  

  

    @Override  

    public void onDestroy() {  

        // TODO Auto-generated method stub  

        // 服务停止时停止播放音乐并释放资源  

        mp.stop();  

        mp.release();  

        super.onDestroy();  

    }  

  

    @Override  

    public IBinder onBind(Intent intent) {  

        // TODO Auto-generated method stub  

        return null;  

    }  

  

}  

在Activity中调用MyService启动音乐或关闭音乐,这时就算退出应用,如果没有关闭Service,它还会在后台播放直至关闭

 

在Alarm这个Activity继承类中启动音乐:

 

[java] view plaincopy

// 播放闹铃  

        Intent intentSV = new Intent(Alarm.this, MyService.class);  

        startService(intentSV);  

 

在Alarm这个Activity继承类中关闭音乐:

 

[java] view plaincopy

//关闭闹铃声  

        Intent intentSV = new Intent(Alarm.this, MyService.class);  

        stopService(intentSV);  

 

这样就能实现Service在后台播放所要播放的音乐,当然,在哪里需要启动或关闭音乐看你自己个人需求。

另需要注意一点的是,别忘了注册:
在AndroidManifest.xml中的Application中加入:

 

[html] view plaincopy

<</span>[b]service android:name=".MyService" />  [/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: