`

Android服务之Service(其一)

 
阅读更多
android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西。你可以启动一个服务Service来播放音乐,或者记录你地理信息位置的改变,或者启动一个服务来运行并一直监听某种动作。

Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做耗时动作。

那么究竟Service怎么使用呢?

老规矩,先来点基础知识。

一.基础知识
服务一般分为两种:

1:本地服务, Local Service 用于应用程序内部。在Service可以调用Context.startService()启动,调用Context.stopService()结束。在内部可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。无论调用了多少次startService(),都只需调用一次stopService()来停止。

2:远程服务, Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。客户端建立到服务对象的连接,并通过那个连接来调用服务。调用Context.bindService()方法建立连接,并启动,以调用 Context.unbindService()关闭连接。多个客户端可以绑定至同一个服务。如果服务此时还没有加载,bindService()会先加载它。
提供给可被其他应用复用,比如定义一个天气预报服务,提供与其他应用调用即可。

那么先来看Service的生命周期吧:如图:





context.startService() ->onCreate()- >onStart()->Service running--调用context.stopService() ->onDestroy()

context.bindService()->onCreate()->onBind()->Service running--调用>onUnbind() -> onDestroy()
从上诉可以知道分别对应本地的,,以及远程的,也对应不同的方式启动这个服务。

二.实战
我们可以定义一个本地服务继承Service,然后在这个服务里播放媒体播放器或者记录地理位置变化。通常有时候我们的Service要与Activity交互,那么可以可以定义一个内部类,返回这个Service,当然我们要考虑到如果是以绑定方式启动服务,那么内部类可以定义为继承Binder,然后返回本地服务,具体代码如下。


package com.dongzi;

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

public class LocalService extends Service {

    private static final String TAG = "LocalService"; 
    private IBinder binder=new LocalService.LocalBinder();
    
    @Override
    public IBinder onBind(Intent intent) {
         
        return binder;
    }
    MediaPlayer mediaPlayer=null;
    @Override 
    public void onCreate() { 
            Log.i(TAG, "onCreate"); 
            //这里可以启动媒体播放器
           // if(mediaPlayer==null)
           //     mediaPlayer=MediaPlayer.create(this, uri);
            super.onCreate(); 
    } 

    @Override 
    public void onStart(Intent intent, int startId) { 
            Log.i(TAG, "onStart"); 
            super.onStart(intent, startId); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
          Log.i(TAG, "onStartCommand"); 
        return START_STICKY;
    }

    
    
    @Override 
    public void onDestroy() { 
            Log.i(TAG, "onDestroy"); 
            super.onDestroy(); 
    } 

    
    //定义内容类继承Binder
    public class LocalBinder extends Binder{
        //返回本地服务
        LocalService getService(){
            return LocalService.this;
        }
    }
    
    
}

我们可以从上面知道

 //定义内容类继承Binder
    public class LocalBinder extends Binder{
        //返回本地服务
        LocalService getService(){
            return LocalService.this;
        }
    }


可以返回这个服务,然后activity可以通过服务调用服务的方法了。

那么如何启动服务呢?从上面基础知识中,我们知道有2种方法,如下:


  //启动服务
    private void startCustomService(){
         Intent intent=new Intent(this,LocalService.class);
         startService(intent);
    }
第2种绑定方式:



LocalService localService=null;
    //用bindService方法启动服务
    private void BinderService(){
         Intent intent=new Intent(this,LocalService.class);
         bindService(intent, new ServiceConnection(){
            @Override
            public void onServiceConnected(ComponentName componentName, IBinder binder) {
                //调用bindService方法启动服务时候,如果服务需要与activity交互,
                //则通过onBind方法返回IBinder并返回当前本地服务
                localService=((LocalService.LocalBinder)binder).getService();
                //这里可以提示用户,或者调用服务的某些方法
            }

            @Override
            public void onServiceDisconnected(ComponentName componentName) {
                localService=null;
                //这里可以提示用户
            }     
         }, Context.BIND_AUTO_CREATE);
    }

在绑定服务的时候,需要一个服务连接对象,ServiceConnection,服务一旦连接,就会调用onServiceConnected方法,我们可以在这个方法里面返回我们的本地服务对象,具体看代码;而在服务断开时候会调用onServiceDisconnected方法,我们可以清理一些服务资源。

分享到:
评论

相关推荐

    android学习之Service启动1

    在Android开发中,Service是四大组件之一,它用于在后台执行长时间运行的操作,而不与用户交互。本篇文章将深入探讨“android学习之Service启动1”的主题,主要关注Service的启动方式及其基本用法。 首先,Service...

    Android学习之Service练习

    在Android应用开发中,`Service` 是...综上所述,"Android学习之Service练习"涵盖了Android开发中不可或缺的一部分,通过实际操作,你可以更好地理解Service的工作原理和使用场景,为开发更复杂的应用打下坚实的基础。

    Android之Service实现比较大小

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互的界面已关闭。本篇文章将深入探讨Android中的Service,分析不同类型的Service及其特性,并对比它们之间的...

    Android 远程服务(remote service)

    服务(Service)是Android四大组件之一,它在后台执行任务,不与用户界面交互。服务可以长时间运行,即使用户离开应用,服务仍然可以持续执行。 **二、远程服务原理** 1. **AIDL(Android Interface Definition ...

    Android Service之bound实现

    本文将深入探讨“Android Service之bound实现”,理解如何通过绑定服务(Bound Service)来创建一个与应用程序组件交互的服务。 首先,我们要了解服务的两种基本类型:Start Service和Bound Service。Start Service...

    Android服务Service详解

    在Android应用开发中,Service是四大组件之一,用于执行长时间运行的任务,如后台音乐播放、网络数据下载等。Service不同于Activity,它没有用户界面,但可以在后台持续运行,即使用户切换到其他应用也不会受到影响...

    android service 简单实例源代码

    在Android开发中,Service是四大组件之一,它在后台运行,不与用户界面直接交互,常用于执行长时间的任务,如播放音乐、网络通信等。本篇文章将深入解析"android service 简单实例源代码",帮助你理解如何在Android...

    Android服务Service_详解.pdf

    Android服务(Service)是Android操作系统中四个核心应用程序组件之一,其他三个分别是Activity、BroadcastReceiver和ContentProvider,它们在Android应用开发中的作用和使用场景各不相同。Service的作用主要体现在...

    Android 多个service的action 相同冲突 验证demo

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...

    android 各种服务service练习

    在Android开发中,服务(Service)是四大组件之一,它在后台执行长时间运行的操作而无需与用户交互。本练习旨在帮助初学者深入理解和熟练运用Android中的各种服务类型及其使用场景。我们将通过一个示例项目来探讨...

    Qt on Android 启动Android服务并通过该服务发射Qt信号

    2. **Android服务(Service)**:在Android系统中,服务是一种在后台运行的组件,不提供用户界面,但可以执行长时间运行的操作或为其他应用组件提供功能。在本例中,我们创建一个服务来监听SD卡的插入事件。 3. **...

    Android学习之Service开机启动

    - **定义**:Service是Android四大组件之一,用于执行长时间运行的操作,如后台网络请求或音乐播放等。 - **特点**:Service没有用户界面,通常在后台默默工作。 **2. BroadcastReceiver简介** - **定义**:...

    Android系统在新进程中启动自定义服务过程(startService)的原理

    在 Android 系统中,startService 函数是一个非常重要的函数,它允许开发者在新进程中启动自定义服务。这项技术可以将一些计算型逻辑从主进程中分离出来,从而提高用户体验。在本文中,我们将详细分析主进程是如何...

    如何创建android系统服务

    android系统级的服务包含了Android Service 和Native Service . Android Service 也称作 Java Service ,是用JAVA语言编写的,实现在框架层。 Native Service 也称作 System Service ,是用C++语言编写的,实现...

    Android Service之start实现

    在Android应用开发中,Service是四大组件之一,它在后台执行长时间运行的操作,不与用户交互。本篇文章将深入探讨如何使用`startService()`方法来启动Android服务。 Service的启动方式主要有两种:`startService()`...

    QT for Android下Service的创建

    综上所述,QT for Android下Service的创建是一项涉及多层技术融合的任务,包括Qt编程、Android原生服务的理解、JNI编程以及跨平台通信。通过熟练掌握这些技能,开发者可以构建出功能强大且高效的Android应用,充分...

    Android防止service多次执行startCommand

    在Android应用开发中,Service是四大组件之一,用于在后台长时间运行操作,比如播放音乐、网络通信等。然而,如果不加以控制,用户或者系统可能会多次启动同一个Service,导致不必要的资源消耗和服务的异常行为。本...

    Music_Player_Service.rar_ANDROID 播放_Service android_android serv

    - Service是Android四大组件之一,用于在后台执行任务,如音乐播放、数据同步等。 - Service生命周期包括onCreate()、onStartCommand()、onBind()、onDestroy()等关键方法,开发者需要根据需求在这些方法中处理...

    android多个activity和一个service通信

    总之,Android中的Activity和服务通信是一项核心技能,理解和掌握以上方法将有助于构建更稳定、高效的应用。在实际开发中,应根据需求选择合适的通信方式,并注意处理好生命周期和异常情况,以保证良好的用户体验。

    Android-AccessibilityService无障碍服务库一行代码启用快速开发复杂的自动操作业务

    在Android平台上,无障碍服务(AccessibilityService)是一种强大的工具,它允许开发者创建应用程序来辅助有特殊需求的用户,或者实现自动化任务。"Android-AccessibilityService无障碍服务库一行代码启用快速开发...

Global site tag (gtag.js) - Google Analytics