总之服务总是藏在后台的.
Service没有界面的Activity.
1创建一个服务
1.新建一个类继承Service
2.重写必要的生命周期方法
package com.click369.createservice;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service{
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
3.项目清单文件中配置自己的服务
<service android:name="com.click369.createservice.MyService"></service>
2.启动服务
Service的启动有两种方式:
1.context.startService()
context.startService() 启动流程:
context.startService() -> onCreate() -> onStart() -> Service running
如果Service还没有运行[第一次启动],则android先调用onCreate(),然后调用onStart();
如果Service已经运行[不是第一次启动],则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
context.stopService() -> onDestroy() -> Service stop
如果stopService的时候会直接onDestroy,服务就会停止。
如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService关闭Service。
测试实例
package com.click369.servicedemo2;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends Activity {
private Intent intent=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent=new Intent(this,MyService.class);
}
/**
* 播放加暂停
* @param view
*/
public void playAndPause(View view){
//判断按钮
Button button=(Button)view;
String button_text=button.getText().toString();
int value=0;
if(button_text.equals("播放音乐")){
button.setText("暂停播放");
value=1;
}else if(button_text.equals("暂停播放")){
button.setText("播放音乐");
value=2;
}
intent.putExtra("test", value);
this.startService(intent);
}
/**
* 停止服务
* @param view
*/
public void stopMyService(View view){
this.stopService(intent);
}
/**
* 退出应用
*/
public void exitApp(View view){
this.finish();
}
}
package com.click369.servicedemo2;
import java.io.File;
import java.io.IOException;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Environment;
import android.os.IBinder;
public class MyService extends Service{
//定义音乐播放器
private MediaPlayer mediaPlayer=null;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
if(mediaPlayer==null){
//创建音乐播放器create(this, resid);
//context----播放器的运行环境
//int resid---资源id
//mediaPlayer=MediaPlayer.create(this, R.raw.xinyu);
mediaPlayer=new MediaPlayer();
// try {
// File file=new File(Environment.getExternalStorageDirectory(),"xinyu.mp3");
// String path=file.getPath();
// mediaPlayer.setDataSource(path);
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
try {
mediaPlayer.setDataSource("http://192.168.1.45:8080/listserver/test/xinyu.mp3");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置是否循环播放
mediaPlayer.setLooping(false);
}
}
@Override
@Deprecated
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
int value=intent.getIntExtra("test", 0);
switch(value){
case 1:
//播放音乐
play();
break;
case 2:
//暂停播放音乐
pause();
break;
}
}
/**
* 播放音乐
*/
private void play() {
//判断音乐是否正在播放
if(!mediaPlayer.isPlaying()){
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//播放
mediaPlayer.start();
}
}
/**
* 暂停播放音乐
*/
private void pause() {
if(mediaPlayer.isPlaying()){
//暂停
mediaPlayer.pause();
}
}
@Override
public void onDestroy() {
super.onDestroy();
if(mediaPlayer!=null || mediaPlayer.isPlaying()){
mediaPlayer.stop();
mediaPlayer.release();
}
}
}