android Service 的简单使用

转载 2016年05月30日 10:50:12

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 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.startService(new Intent(this, PlayService.class)); } @Override protected void 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; public class ServiceActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ Button buttonOn, buttonOff; String TAG = "ServiceActivity"; @Override public void 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 public void 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 protected void onStop() { // TODO Auto-generated method stub super.onStop(); Log.v(TAG, "ActivityonStop"); } @Override protected void 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; public class PlayService extends Service { String TAG = "ServiceActivity"; MediaPlayer mediaPlayer; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void 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 public void 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 public void 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的简单使用

先创建个类,继承于Service类,例如: EchoService.java文件: public class EchoService extends Service { @Overrid...

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

Service翻译成中文是服务,熟悉Windows 系统的同学一定很熟悉了。Android里的Service跟Windows里的Service功能差不多,就是一个不可见的进程在后台执行。      A...
  • cjjky
  • cjjky
  • 2011-06-18 01:17
  • 23919

android Service 的简单使用(学习别人)

http://www.cnblogs.com/snowdrop/articles/1807083.html1、要使用Service,首先就是在配置文件里吗添加Service,如果不填加,你的Servi...

android四大组件---Service的简单使用

服务是什么服务(Service)是Android中实现后台运行程序的解决方案,他非常适合用于那些不需要和用户进行交互的并且需要长期运行的任务,即使用户打开了另一个应用程序,程序被切到了后台,服务依然能...

Android Service 的使用(一)----简单Serivce的启动和停止

学习Android也有一段时间了,最近很想总结一下之前学过的知识点,不断的经验总结从中找到差距,查漏补缺才可能有长足的进步。下面就简单介绍一下Android四大基本组件Service的使用方法,希望对...

Android Service AIDL 简单使用

aidl是为了让服务实现进程间通信的,使用方法跟boundService差不多,是boundService的延伸。 1.新建一个文件,以.aidl结尾,比如说IMyRemoteService.aidl...

一个简单的demo学习Android远程Service(AIDL的使用)

这是milo很早之前写在论坛上的一个帖子,现在整理出来,milo也复习一下 一般来说Android 的四大组件都是运行在同一个进程中的,但远程Service运行在不同的进程里。这进程间的通信是使用了...

Android小例子:Service组件的简单使用

Service组件和Activity组件一样都是可执行的程序,它也拥有自己的生命周期。开发Service和开发Activity的过程基本相似。开发一个Service组件一般需要两步:第一定义一个继承至...

android Service 的简单使用

1.Service的简单创建 A. 创建一个MyService 继承Service 实现OnBind()方法 B. 在AndroidManifest文件中,节点之间,配置自定义的服务 C. 在acti...

android service的简单使用

定义一个服务在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示:package com.ja...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)