Android初试--Android中的Service简介(1)

本文介绍了Android中Service的基本使用,包括如何启动和停止Service。示例代码展示了一个播放/暂停音乐的Service,强调了当调用者退出时Service会继续运行,需要通过stopService来关闭。
摘要由CSDN通过智能技术生成
Service----服务【android中的4大核心组件】
总之服务总是藏在后台的.
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();
}
}
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值