Android Service详解及示例代码

Android Service 详细介绍:

1、Service的概念

2、Service的生命周期

3、实例:控制音乐播放的Service

一、Service的概念

Service是Android程序中四大基础组件之一,它和Activity一样都是Context的子类,只不过它没有UI界面,是在后台运行的组件。

二、Service的生命周期

Service对象不能自己启动,需要通过某个Activity、Service或者其他Context对象来启动。启动的方法有两种,Context.startService和Context.bindService()。两种方式的生命周期是不同的,具体如下所示。

Context.startService方式的生命周期:

启动时,startService –> onCreate() –> onStart()
停止时,stopService –> onDestroy()

Context.bindService方式的生命周期:

绑定时,bindService  -> onCreate() –> onBind()
解绑定时,unbindService –>onUnbind() –> onDestory()

三、实例:控制音乐播放的Service

下面我们用一个可以控制在后台播放音乐的例子来演示刚才所学知识,同学们可以通过该例子可以明显看到通过绑定方式运行的Service在绑定对象被销毁后也被销毁了。

下面把代码分享如下:

1、建立一个新项目名字叫 Lesson14_HelloService,Activity起名叫MainHelloService.java

2、res/layout/main.xml中代码写成

< ?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">
<textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="音乐播放服务" android:textsize="25sp" android:layout_margintop="10dp">
<button android:text="开启音乐播放服务" android:textsize="20sp" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
<button android:text="停止音乐播放服务" android:textsize="20sp" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>

<button android:text="绑定音乐播放服务" android:textsize="20sp" android:id="@+id/Button03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
<button android:text="解绑定音乐播放服务" android:textsize="20sp" android:id="@+id/Button04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margintop="10dp">
</button>
</textview></linearlayout>

3、在res目录中建立一个raw目录,并把一个音乐文件babayetu.mp3拷贝进来3、在Activity的同目录新建一个service文件

MusicService.java

package android.basic.lesson14;

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 MusicService extends Service {

    //为日志工具设置标签
    String tag ="MusicService";    

    //定义音乐播放器变量
    MediaPlayer mPlayer;

    //其他对象通过bindService方法通知该Service时该方法会被调用
    @Override
    public IBinder onBind(Intent intent) {
        Toast.makeText(this,"MusicService onBind()",Toast.LENGTH_SHORT).show();
        Log.i(tag, "MusicService onBind()");
        mPlayer.start();
        return null;
    }

    //其他对象通过unbindService方法通知该Service时该方法会被调用
    @Override
    public boolean onUnbind(Intent intent){
        Toast.makeText(this, "MusicService onUnbind()", Toast.LENGTH_SHORT).show();
        Log.i(tag, "MusicService onUnbind()");
        mPlayer.stop();
        return false;
    }

    //该服务不存在需要被创建时被调用,不管startService()还是bindService()都会在启动时调用该方法
    @Override
    public void onCreate(){
        Toast.makeText(this, "MusicService onCreate()", Toast.LENGTH_SHORT).show();
        //创建一个音乐播放器对象
        mPlayer=MediaPlayer.create(getApplicationContext(), R.raw.babayetu);
        //设置可以重复播放
        mPlayer.setLooping(true);
        Log.i(tag, "MusicService onCreate()");
    }

    //用startService方法调用该服务时,在onCreate()方法调用之后,会调用改方法
    @Override
    public void onStart(Intent intent,int startid){
        Toast.makeText(this,"MusicService onStart",Toast.LENGTH_SHORT).show();
        Log.i(tag, "MusicService onStart()");
        mPlayer.start();
    }

    //该服务被销毁时调用该方法
    @Override
    public void onDestroy(){
        Toast.makeText(this, "MusicService onDestroy()", Toast.LENGTH_SHORT).show();
        mPlayer.stop();
        Log.i(tag, "MusicService onDestroy()");
    }
}

4、MainHelloService.java中的代码:

package android.basic.lesson14;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainHelloService extends Activity {

    //为日志工具设置标签
    String tag = "MusicService";

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //输出Toast消息和日志记录
        Toast.makeText(MainHelloService.this, "MainHelloService onCreate", Toast.LENGTH_SHORT).show();
        Log.i(tag, "MainHelloService onCreate");

    //定义组件对象
    Button b1= (Button)findViewById(R.id.Button01);
    Button b2= (Button)findViewById(R.id.Button02);
    Button b3= (Button)findViewById(R.id.Button03);
    Button b4= (Button)findViewById(R.id.Button04);

     //定义服务链接对象
     final ServiceConnection conn = new ServiceConnection(){

            @Override
            public void onServiceConnected(ComponentName name, IBinder service) {
                Toast.makeText(MainHelloService.this, "ServiceConnection onServiceConnected", Toast.LENGTH_SHORT).show();
                Log.i(tag, "ServiceConnection onServiceConnected");

            }

            @Override
            public void onServiceDisconnected(ComponentName name) {
                Toast.makeText(MainHelloService.this, "ServiceConnection onServiceDisconnected", Toast.LENGTH_SHORT).show();
                Log.i(tag, "ServiceConnection onServiceDisconnected");

            }};

        //定义点击监听器
    OnClickListener ocl= new OnClickListener(){

            @Override
            public void onClick(View v) {
                //显示指定intent所指的对象是个Service
                Intent intent = new Intent(MainHelloService.this,android.basic.lesson14.MusicService.class);
                switch(v.getId()){
                case R.id.Button01:
                    //开始服务
                    startService(intent);
                    break;
                case R.id.Button02:
                    //停止服务
                    stopService(intent);
                    break;
                case R.id.Button03:
                    //绑定服务
                    bindService(intent,conn,Context.BIND_AUTO_CREATE);
                    break;
                case R.id.Button04:
                    //解除绑定
                    unbindService(conn);
                    break;
                }
            }
    };

    //绑定点击监听器
    b1.setOnClickListener(ocl);
    b2.setOnClickListener(ocl);
    b3.setOnClickListener(ocl);
    b4.setOnClickListener(ocl);  

  }

  @Override
  public void onDestroy(){
      super.onDestroy();
        Toast.makeText(MainHelloService.this, "MainHelloService onDestroy", Toast.LENGTH_SHORT).show();
        Log.i(tag, "MainHelloService onDestroy");
  }
}

以上就是对Android Service的介绍,后续继续补充相关资料,谢谢大家对本站的支持!

(0)

相关推荐

  • Android基于Service的音乐播放器

    本文开发一个基于Service的音乐播放器,音乐由后台运行的Service负责播放,当后台的播放状态发生变化时,程序将会通过发送广播通知前台Activity更新界面:当点击Activity的界面按钮时,系统将通过发送广播通知后台Service来改变播放状态. 前台Activity界面有两个按钮,分别用于控制播放/暂停.停止,另外还有两个文本框,用于显示正在播放的歌曲名.歌手名.前台Activity的代码如下: public class MainActivity extends AppCompat

  • Android辅助功能AccessibilityService与抢红包辅助

    推荐阅读:Android中微信抢红包插件原理解析及开发思路 抢红包的原理都差不多,一般是用Android的辅助功能(AccessibilityService类)先监听通知栏事件或窗口变化事件来查找红包关键字然后去模拟点击或打开红包. 下面附上源码,程序已实现自动抢红包,锁屏黑屏状态自动解锁亮屏,Android4.X测试通过.函数具体功能请看详细注释. 注:在聊天界面收到红包不会自动打开,因为通知栏没有消息提示从而监听不了,此时只需手动点一下即可.其他未知情况请自行用LogCat调试,源码已经有相

  • Android使用Messenger实现service与activity交互

    service与activity交互的方式有多种,这里说说使用Messenger来实现两者之间的交互. Service程序: public class MessengerService extends Service { final Messenger mMessenger = new Messenger(new IncomingHandler()); @Override public IBinder onBind(Intent intent) { return mMessenger.getBi

  • Android Service 服务不被杀死的妙招

    Service是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互. Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理. 从Android官方文档中,我们知道onStartCommand有4种int返回值,首先简单地讲讲int返回值的作用.

  • 浅谈Android Activity与Service的交互方式

    实现更新下载进度的功能 1. 通过广播交互 Server端将目前的下载进度,通过广播的方式发送出来,Client端注册此广播的监听器,当获取到该广播后,将广播中当前的下载进度解析出来并更新到界面上. 优缺点分析: 通过广播的方式实现Activity与Service的交互操作简单且容易实现,可以胜任简单级的应用.但缺点也十分明显,发送广播受到系统制约.系统会优先发送系统级广播,在某些特定的情况下,我们自定义的广播可能会延迟.同时在广播接收器中不能处理长耗时操作,否则系统会出现ANR即应用程序无响应

  • Android实现开机自动启动Service或app的方法

    本文实例讲述了Android实现开机自动启动Service或app的方法.分享给大家供大家参考,具体如下: 第一步:首先创建一个广播接收者,重构其抽象方法 onReceive(Context context, Intent intent),在其中启动你想要启动的Service或app. import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; i

  • Android Service中方法使用详细介绍

     service作为四大组件值得我们的更多的关注 在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务.例如,一个从service播放音乐的音乐播放器,应被设置为前台运行,因为用户会明确地注意它的运行.在状态栏中的通知可能会显示当前的歌曲并且允许用户启动一个activity来与音乐播放器交互. Service的两种实现形式 1.非绑定 通过调用应用程序组件(例如Activity)的startService()方法来启动一个服务.一旦启动,服务就会在

  • Android提高Service优先级的方法分析

    本文实例讲述了Android提高Service优先级的方法.分享给大家供大家参考,具体如下: Android 系统对于内存管理有自己的一套方法,为了保障系统有序稳定的运信,系统内部会自动分配,控制程序的内存使用.当系统觉得当前的资源非常有限的时候,为了保 证一些优先级高的程序能运行,就会杀掉一些他认为不重要的程序或者服务来释放内存.这样就能保证真正对用户有用的程序仍然再运行.如果你的 Service 碰上了这种情况,多半会先被杀掉.但如果你增加 Service 的优先级就能让他多留一会,我们可以

  • Android getSystemService用法实例总结

    本文实例分析了Android getSystemService用法.分享给大家供大家参考,具体如下: 1. 说明 android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监听是否有SD卡安装及移除,ClipboardService提供剪切板功能,PackageManagerService提供软件包的安装移除及查看等等,应用程序可以通过系统提供的Manager接口来访问这些Service提供的数据,以下将说明他们

  • Android 两个Service的相互监视实现代码

    两个Service之间相互监视的实现 在实际开发中可能需要用到两个Service相互监视的情况,本示例就是实现此功能以作参考. 服务A: public class ServiceA extends Service { private static final String TAG = ServiceA.class.getSimpleName(); MyBinder mBinder; MyServiceConnection mServiceConnection; PendingIntent mPe

  • Android中bindService基本使用方法概述

    Android中有两种主要方式使用Service,通过调用Context的startService方法或调用Context的bindService方法,本文只探讨纯bindService的使用,不涉及任何startService方法调用的情况.如果想了解startService相关的使用,请参见<Android中startService基本使用方法概述>. bindService启动服务的特点 相比于用startService启动的Service,bindService启动的服务具有如下特点:

随机推荐