android Service 的简单使用

1、要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Service是不能够使用的。目前学到的方法有两种

方法一:<service android:enabled="true" android:name=".PlayService" />

方法二:<service android:name=".PlayService" />

点后面是Service类的名字。

2、工程包括两个类:

ServiceActivity.java

PlayService.java

其中:ServiceActivity.java定义了两个按钮,分别控制音乐的播放与停止。

用startService和stopService完成Activity与Service之间的切换,启动Service以及取消Service,

如果不用按钮,可以在Activity的OnCreate和OnDestrpy里面启动和取消Service,如下:

代码

@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

this.startService(new Intent(this, PlayService.class));
}

@Override
protectedvoid onDestroy() {
super.onDestroy();
this.stopService(new Intent(this,PlayService.class));
}

在activity里面,如果需要使用Service的话,需要调用startService(),从而利用startService()去调用Service中的OnCreate()和onStart()方法来启动一个后台的Service。

启动一个Service的过程如下:context.startService() ->onCreate()->onStart()->Servicerunning其中onCreate()可以进行一些服务的初始化工作,onStart()则启动服务。

停止一个Service的过程如下:context.stopService() |->onDestroy() ->Service stop

创建Service需要继承自 android.app.Service 的类,然后重新实现在Service各个状态要回调的方法,Service的回调方法有三个,分别是:

  • onCreate()
    创建
  • onStart()
    开始
  • onDestry()
    释放

注意:Service是不能自己启动的,只有通过 Context 对象 调用startService和bindService方法来启动。也就是说Service不能自己调用的,所以我们看见很多Service都是用Activity调用的。

(1)Context.startService():Service会经历onCreate -> onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者stopSelf(),他都会被停止。补充说明:传递给startService()的Intent对象会传递给onStart()方法。调用顺序为:onCreate --> onStart(可多次调用) --> onDestroy。
(2)Context.bindService():Service会经历onCreate() -> onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind -> onDestroyed相应退出,所谓绑定在一起就共存亡了
补充说明:传递给bindService()的Intent对象会传递给onBind(),传递给unbindService()的Intent对象会传递给onUnbind()方法调用顺序为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
(3)注意事项:在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。还有一点,目前我没有遇到过需要startService和bindService交互使用的情况(我认为不会有这种需求),所以不必去考虑交互的问题,待遇到时再考虑不迟。
(4)BroadcastReceiver只能通过startService启动Service,因为广播本身生命周期很短,bind的话没有意义

PlayService.java是Service类,

包括OnCreate,OnStart,OnDestroy三种方法,

其中OnCreate可有可无,如果有,可以在这里创建与MediaPlayerd的链接。如果无,可以在Onstart里面创建这个链接。

OnCreate在音乐播放周期里面(未OnDestroy)之前,只创建一次,而每按一次播放,OnStart就会被调用一次。

OnStart,里面可以启动播放音乐,

OnDestroy,里面调用停止播放音乐。

如果按了停止按钮,会调用(或者打印Log更直观)“ServiconDestroy“,但是Activity不会退出。

当退出Activity的时候,会相继调用(或者打印Log更直观)"ActivityonStop",和"ActivityOnDestroy"此时,音乐播放是不会停止的,

可以知道,如果想让Service一启动就执行的代码,可以写在Service的OnCreate或OnStart,里面,会在启动Service的时候自动调用,与Activity自动调用OnCreate道理是一样的。

代码如下:

代码

package com.service.su;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

publicclass ServiceActivity extends Activity implements OnClickListener {
/** Called when the activity is first created. */
Button buttonOn, buttonOff;
String TAG ="ServiceActivity";

@Override
publicvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

buttonOn = (Button) findViewById(R.id.button_on);
buttonOff = (Button) findViewById(R.id.button_off);

buttonOn.setOnClickListener(this);
buttonOff.setOnClickListener(this);
Log.v(TAG, "ActivityonCreate");
}

@Override
publicvoid onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case (R.id.button_on):
Log.v(TAG, "ActivitystartService");
this.startService(new Intent(this,PlayService.class));
// startService(new Intent(this, PlayService.class));

break;
case (R.id.button_off): {
Log.v(TAG, "ActivitystopService");
this.stopService(new Intent(this,PlayService.class));
//stopService(new Intent(this, PlayService.class));

}
break;

default:
break;

}

}

@Override
protectedvoid onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.v(TAG, "ActivityonStop");
}

@Override
protectedvoid onDestroy() {
// TODO Auto-generated method stub
Log.v(TAG, "ActivityonDestroy");
super.onDestroy();

}

}

代码

package com.service.su;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

publicclass PlayService extends Service {
String TAG ="ServiceActivity";
MediaPlayer mediaPlayer;

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
returnnull;
}

@Override
publicvoid onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Toast.makeText(this, "Play Service Created", Toast.LENGTH_LONG).show();
Log.v(TAG, "ServiceonCreate");

mediaPlayer = MediaPlayer.create(this, R.raw.test);

/*
* 要用MediaPlayer来创建,不能用MediaPlayer的对象来创建 // 不用带后缀 mediaPlayer = new
* MediaPlayer(); mediaPlayer.create(this, R.raw.test);
*/

/*
* try { mediaPlayer.setDataSource("/sdcard/music/lost times.mp3");
* mediaPlayer.prepare();
*
*
* //方法二,从网上的链接获取歌曲 try { mediaPlayer.setDataSource(
* "http://www.yousss.com/uploadfile/mp3/2007-11/20071129134414713.mp3"
* );
*/

// mediaPlayer.setLooping(true);
}

@Override
publicvoid onStart(Intent intent, int startId) {
// TODO Auto-generated method stub
super.onStart(intent, startId);
/*
* //可以在OnCreate里面创建与音乐的链接,也可以在OnStart里面创建 mediaPlayer =
* MediaPlayer.create(this, R.raw.test);
*/
Toast.makeText(this, "Play Service onStart", Toast.LENGTH_LONG).show();
Log.v(TAG, "ServiceonStart");
mediaPlayer.start();
}

@Override
publicvoid onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Toast.makeText(this, "Play Service Stopped", Toast.LENGTH_LONG).show();
Log.v(TAG, "ServiconDestroy");
mediaPlayer.stop();
}

}

android Service 的简单使用相关推荐

  1. [转]Android Service Test——简单测试例子

    本文转自:http://cmk128.chinaunix.com/space.php?uid=20771867&do=blog&id=134316 前两篇文章对Android Serv ...

  2. Android Service使用方法--简单音乐播放实例

    Service翻译成中文是服务,熟悉Windows 系统的同学一定很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行. Androi ...

  3. android调用系统音频播放器,Android使用Service实现简单音乐播放实例

    Service翻译成中文是服务,熟悉Windows 系统的同学一定很熟悉了.Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行. Androi ...

  4. 简单音乐播放实例的实现,Android Service AIDL 远程调用服务

    2019独角兽企业重金招聘Python工程师标准>>> Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remo ...

  5. Android Service AIDL 远程调用服务 【简单音乐播放实例】

    Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成 ...

  6. android 浏览器源码分析,从源码出发深入理解 Android Service

    原标题:从源码出发深入理解 Android Service 原文链接: 建议在浏览器上打开,删除了大量代码细节,:) 本文是 Android 系统学习系列文章中的第三章节的内容,介绍了 Android ...

  7. android service 学习(上)

    转载自:http://www.cnblogs.com/allin/archive/2010/05/15/1736458.html Service是android 系统中的一种组件,它跟Activity ...

  8. android service 学习(下)

    android service 学习(下) 通常每个应用程序都在它自己的进程内运行,但有时需要在进程间传递对象,你可以通过应用程序UI的方式写个运行在一个不同的进程中的service.在android ...

  9. Android Service的思考(1)

    在Android框架中,Service是比较难以理解的一部分,傻蛋查阅了相关资料和经过一系列的代码测试,准备写一个系列文章,尝试着把Service由浅入深的梳理一遍,帮助大家更快的掌握Android ...

最新文章

  1. 【计算机图形学】六面体旋转并实时切换虚线实线 - 代码实现
  2. JavaScript中的基本数据类型与引用数据类型
  3. Python3教程Web开发实战梳理-day7(看着不错)
  4. C#各种结束进程的方法详细介绍
  5. 卸载失败_Windows 10可能的新功能-自动卸载失败的补丁更新
  6. linux之vim复制多行、光标跳转到指定行、插入当前光标上和下行
  7. ARCHLINX设置静态ip使用
  8. 我在创业公司的开发经验总结
  9. Java开发笔记(一百四十六)JDBC的应用原理
  10. 140个电脑小知识、小技巧(2)
  11. 纯css实现二级下拉菜单
  12. 前端 关于汇率的计算
  13. 想方便快捷的分享/收藏图片?试试免费好用的微博/b站图床
  14. conda安装tensorflow2.x和pytorch1.8.0的一些常用命令
  15. 浅析AI智能分析网关的车辆/车牌识别技术的研发及应用场景
  16. ssrender例子
  17. android设备压差表怎么校准,MY-DJ101
  18. 想要认认真真的夯实基础知识了
  19. 虚函数、纯虚函数、虚继承、多继承
  20. 为什么勒索软件攻击激增?

热门文章

  1. 如何巧妙的运用好弹簧布局SpringLayout?
  2. mysql之查询某段时间范围的数据
  3. for循环连续创建对象
  4. Java解决找不到主类或者无法加载主类
  5. snmpset对象不可写_别再问了,好吗?Java字符串一定是不可变的
  6. C# TCP服务器和客户端
  7. python for 格式化字符串 list.count
  8. 网络爬虫随记:2018-03-12启(refreshing)
  9. struts2框架单文件、多文件上传实例详解
  10. F8-Nginx代理缓存负载均衡后端均衡