【转】 Android学习笔记(21…
2015-12-26 20:44
447 查看
转自:http://blog.csdn.net/moruna/article/details/7882381
1、Service介绍
官方解释:A
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]
1、Service介绍
官方解释:A
Serviceisan
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]
相关文章推荐
- [转]android声音调整源代码分析
- 【转】Android R.java文件丢…
- 【转】android 自定义progres…
- 【转】android利用VideoView实现视…
- 【转】android Videoview&nbs…
- 【转】Android三种播放视频的方式
- android 获取Bitmap 的两种方法
- android导入第三方jar包报错 …
- Android 禁止系统休眠,使屏…
- Android点击事件实例之通过…
- Android开发 旋转屏幕导致Act…
- Android反编译
- 【Android学习笔记】This tag and its children can be replaced by one <TextView/> and a compound drawable
- 史上最全AndroidStudio快捷键中文版
- Android定位开发之百度定位、高德定位、腾讯定位,三足鼎立一起为我所用!
- Android 理解Window 和 WindowManager
- Android中的动画具体解释系列【1】——逐帧动画
- 使用清华镜像下载Android源码
- Android手机如何录制屏幕及转GIF
- Android 多种方式正确的加载图像,有效避免oom