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();
}
}
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();
}
}
相关文章推荐
- 页面之间传值(单例传值)(自己使用)
- 算法训练 拦截导弹
- 第二周项目二-就拿胖子说事
- Linux 安装jdk、tomcat,maven
- 九度题目1439Least Common Multiple
- 码流 / 码率 / 比特率 / 帧速率 / 分辨率 / 高清
- lightoj 1031 - Easy Game 博弈类区间DP
- 系列文章--突袭HTML5
- 《Linux内核设计与实现》读书笔记(七)- 中断处理【转】
- JavaScript打印杨辉三角
- Leetcode:38. Count and Say(JAVA)
- SQlite
- hdu 1240 Asteroids!
- 关于脚本语言的理解(转)
- 线性代数的本质
- C#基础
- CSS的三种引入方式
- SQL语句大全-程序员必备(Oracle版)
- 摇一摇
- 使用Java8过程中遇到的问题