您的位置:首页 > 其它

Service学习笔记

2016-03-15 19:51 68 查看
Service:是Android四大组件之一,是运行在后台的应用。它无法与用户直接的进行交互,必须有用户或其他的程序显示的启动。

Service的生命周期:onCreate()---->onStartCommand()---->onDestory()

Activity中和Service相关的方法:

startService(Intent intent);

stopService(Intent intent);

当activity销毁,服务会继续运行,当调用StopService()时该服务才会停止。重复开启同一个Service只会生成一个实例。也就是说重复开启Service,只需调用一次StopService就能停止服务。他和activity没有双向数据交互。

BindService是绑定Service服务,执行Service中的逻辑流程。

BindService的生命周期: onCreate---->onBind---->onUnBind---->onDestory

BindService():当启动端销毁时,服务会随之销毁,当调用同生共死unBindServcie()服务会解绑(停止运行),

重复绑定同一个Service只会生成一个实例。

一个服务被两种方式启动,至少调用StopServcie才能销毁Service。

Service应用实例:简单的背景音乐播放器,通过三个按钮分别实现播放、暂停、重新播放的功能,代码如下(xml部分省略)

import android.app.Activity;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{

Button btn_start,btn_pause,btn_restart;

MediaPlayer mediaPlayer;

Intent intent;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

intent=new Intent(MainActivity.this,MyScervice.class);

startService(intent);

btn_start=(Button) findViewById(R.id.btn_start);

btn_pause=(Button) findViewById(R.id.btn_pause);

btn_restart=(Button) findViewById(R.id.btn_restart);

btn_start.setOnClickListener(this);

btn_pause.setOnClickListener(this);

btn_restart.setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch(v.getId()){

case R.id.btn_start:

intent.setAction("play");

break;

case R.id.btn_pause:

intent.setAction("pause");

break;

case R.id.btn_restart:

intent.setAction("restart");

break;

default:

break;

}

startService(intent);

}

}

import java.io.IOException;

import android.app.Service;

import android.content.Intent;

import android.media.MediaPlayer;

import android.os.IBinder;

public class MyScervice extends Service {

MediaPlayer player=new MediaPlayer();

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

player=MediaPlayer.create(MyScervice.this,R.raw.a);

try {

player.prepare();

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

super.onCreate();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

String action=intent.getAction();

if("play".equals(action)){

play();

}else if("pause".equals(action)){

pause();

}else if("restart".equals(action)){

player.seekTo(0);

}

return super.onStartCommand(intent, flags, startId);

}

private void pause() {

if(player.isPlaying()){

player.pause();

}

}

private void play() {

if(!player.isPlaying()){

player.start();

}

}

@Override

public void onDestroy() {

player.stop();

super.onDestroy();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: