">
赞
踩
首先先建一个新的类,例如MusicService,将这个类继承Service类;
蓝后,方法重写;下面是start()方法使用服务的生命周期,可以重写的方法在里面
蓝后,去注册一哈这个服务 <service android name=".MusicService"></service>
蓝后去MainActivity里启动这个服务,可以在OnCreate或者按钮监听里加上代码
Intent intent = new Intent(Mainactivity.this,MusicService.class);
startService(intent);
欧克,以上就是start()方法启动服务;
贴一些不错的服务概念解释(取自lvwei1990的官方资料翻译):
1.Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件。其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行。
2.一个组件能够绑定到一个service与之交互(IPC跨进程交互),例如,一个service可能会处理网络操作,播放音乐,操作文件I/O或者与内容提供者(content provider)交互,所有这些活动都是在后台进行。
Service有两种状态,“启动的”和“绑定”
3.service与activity一样都存在与当前进程的主线程中,所以,一些阻塞UI的操作,比如耗时操作不能放在service里进行,比如另外开启一个线程来处理诸如网络请求的耗时操作。如果在service里进行一些耗CPU和耗时操作,可能会引发ANR警告,这时应用会弹出是强制关闭还是等待的对话框。所以,对service的理解就是和activity平级的,只不过是看不见的,在后台运行的一个组件,这也是为什么和activity同被说为Android的基本组件。
接下来使用一下,用服务和MediaPlayer类来实现背景音乐;
新建MusicService类继承Service:
- package com.example.serv;
-
- import java.io.IOException;
-
- import android.app.Service;
- import android.content.Context;
- import android.content.Intent;
- import android.media.MediaPlayer;
- import android.media.MediaPlayer.OnCompletionListener;
- import android.media.MediaTimestamp;
- import android.os.IBinder;
- import android.util.Log;
- import android.widget.Toast;
-
- public class MusicService extends Service{
- Context context = new MainActivity();
- MediaPlayer mp;
- @Override
- public void onStart(Intent intent, int startId) {
- // TODO Auto-generated method stub
- mp.start();
- mp.setOnCompletionListener(new OnCompletionListener() { //监听,如果结束了的话
-
- @Override
- public void onCompletion(MediaPlayer mp) {
- // TODO Auto-generated method stub
- mp.start(); //结束了再开始
- }
- });
- super.onStart(intent, startId);
- }
- @Override
- public void onCreate() { //服务创建
- // TODO Auto-generated method stub
- mp=MediaPlayer.create(MusicService.this, R.raw.backmu);
- try {
- mp.prepare();
- } catch (IllegalStateException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- super.onCreate();
- }
- @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;
- }
-
- }

在Mainfest.xml中注册上面那个服务类
<service
android:name=".MusicService"
android:enabled="true"
>
</service>
在Mainactivity中启动服务
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Intent intent = new Intent(MainActivity.this,MusicService.class);
- intent.setAction("android.intent.action.RESPOND_VIA_MESSAGE");
- startService(intent);
- }
-
- @Override
- protected void onStop() {
- // TODO Auto-generated method stub
-
- Intent intent = new Intent(MainActivity.this,MusicService.class);
- stopService(intent);
- super.onStop();
- }

重写这两个方法就行一个启动服务,一个当activity暂停时候,暂停服务。这样体现了,服务是独立于activity的,是和activity一个级别的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。