`

Android 后台服务

阅读更多
后台服务:运行在后台,一般没有UI.

1.创建一个简单的服务

a.继承 android.app.Service
b.配置 服务

示例:
public class TestService extends Service{
    @override
    public void onCreate(){
        super.onCreate();
        Log.d(TAG, "create testservice...");
    }
   
    @override
    public IBinder onBind(Intent intent){
        Log.d(TAG, "service bind to ...");
        return null;
    }

}
AndroidManifest.xml
<service name="package-path.TestService"></service>



2.服务接口方法

onCreate():void //只调用一次,生命周期回调
onDestroy():void //服务销毁前调用
onLowMemory():void
onBind(Intent intent):IBinder //提供接口为外部应用服务
onReBind(Intent intent):void
onUnBind(Intent intent):boolean
onStart(Intent intent, int startId):void
stopSelf():void
stopSelf(int startId):void
stopSelfResult(int startId):boolean

setForeground(boolean isForeground):void

onConfigurationChanged(Configuration newConfiguration):void //重新配置服务
getApplication():Application //获取实现服务的应用

3.
一个服务可以是本地服务或远程服务,但不能两种类型都是.
本地服务:通过 Context.startService() 启动.
远程服务:通过 Context.bindService() 启动.

4.
本地服务

5.
远程服务(RPC)
a.使用AIDL定义一个服务
b.继承服务,实现接口
c.配置服务

使用远程服务
a.绑定服务
e.处理响应


AIDL 定义一个服务
IStockQuoteService.aidl
package com.syh;
interface IStockQuoteService{
    double getQuote(String ticker);
}


eclipse adt 自动编译 *.aidl 为 *.java
IStockQuoteService.java
package com.syh;

import java.lang.String;
import android.os.*;

public interface IStockQuoteService extends android.os.IInterface{
    public static abstract class Stub extends android.os.Binder implements IStockQuoteService{
        private static final String DESCRIPTOR = "com.syh.IStockQuoteService";
        public Stub(){
            this.attachInterface(this, DESCRIPTOR);
        }
        ...
    }
    
     ....
     public double getQuote(String ticker) throws android.os.RemoteException{
         ...
     }
}


实现定义的 AIDL 接口
StockQuoteService.java
package com.syh;
import ...

public class StockQuoteService extends Service{
    private NotificationManager notificationManager = null;
    public class StockQuoteServiceImpl extends IStockQuoteService.Stub {
        @override
        public double getQuote(String ticker){
            return 2.0;
        }
    } 

    @override 
    public IBinder onBind(Intent intent){
        return new StockQuoteServiceImpl ();
    }
}



暴露服务:
<service name="com.syh.StockQuoteService">
    <intent-filter>
        <action name="com.syh.IStockQuoteService" />
    </intent-filter>
</service>


调用服务:
a.创建一个新项目 ServiceClient
b.创建一个新包名 com.syh
c.复制 IIStockQuoteService.aidl 文件到 com.syh 中.
d.调用 Context.bindService();
e.通过 ServiceConnection 的 onServiceConnected 调用远程方法

public class MainActiviy extends Activity{
    private IStockQuoteService service = null;

    @override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button btn = (Button)super.findViewById(R.id.bindBtn);
        btn.setOnClickListener(new OnClickListener(){
            @override
            public void onClick(View view){
                this.bindService(new Intent(IStockQuoteService.class.getName(), sc, BIND_AUTO_CREATE));

            }



        });
    }

    private ServiceConnection sc = new ServiceConnection(){
        @override
        public void onServiceConnected(ComponentName cname, IBinder service){
            this.service = IStockQuoteService.Stub.asInterface(service);
            double val = 0.0;
            try{
                val = this.service.getQuote("syh");
                
            }catch(RemoteException e){
                Log.e(TAG, e.getMessage(), e);
            }
        }

        @override
        public void onServiceDisConnected(ComponentName cname){

        }

    };
 
}




6.复杂类型打包
    Parcelable
Persion.java

public class Person extends Object implements Parcelable{
    private int age = 0;
    private String name = "";

    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>(){
        public Person createFormParcel(Parcel in){
            return new Person(in);
        }

        public Person[] newArray(int size){
            return new Person[size];
        }
    };

    public Person(){}
    private Persion(Parcel in){
        readFormParcel(in);
    }

    @override
    public int describeContents(){
        return 0;
    }

    @override
    public void writeToParcel(Parcel out, int flags){
        out.writeString(name);
        out.writeInt(age);
    }

    @override
    public void readFromRarcel(Parcel in){
        name = in.readString();
        age = in.readInt();
    }

    //-- getter/setter
    ...


}





项目源码:








  • rpc.zip (101 KB)
  • 下载次数: 125
分享到:
评论
2 楼 zhoujiamail 2011-12-06  
非常感谢,学习了
1 楼 778856 2010-05-02  
学习ing

相关推荐

    Delphi XE 开发android后台服务例程

    Delphi XE 开发Android后台服务是针对使用Embarcadero Delphi XE8及以下版本的开发者,想要构建能够持续运行并独立于用户界面执行任务的Android应用程序的一个重要技术。Delphi作为一款强大的RAD(快速应用开发)...

    android后台服务自启动

    "Android后台服务自启动"是指在特定条件下(如设备启动、接收到特定广播等)自动启动服务的功能。这对于实现定时任务、后台音乐播放、后台数据同步等需求非常关键。 一、Android Service基础知识 1. Service分类:...

    七、Android后台服务-Android开发与实践

    Android 后台服务详解 Android 后台服务是 Android 系统的核心组件之一,它提供了一个无界面、长时间运行的应用功能。了解 Service 的原理和用途是 Android 开发的关键。 Service 的原理 Service 是 Android 系统...

    android后台服务定位

    特别是对于定位功能,Android后台服务能够允许应用在用户不直接与应用交互时持续获取位置信息。下面我们将深入探讨Android后台服务定位的相关知识点。 一、Android服务基础 1. 创建Service:通过继承`Service`类并...

    android后台服务悬浮窗动态截屏

    总的来说,Android后台服务悬浮窗动态截屏涉及了IntentService、悬浮窗、系统权限、反射、屏幕捕获和MediaProjection等多个技术点。理解并熟练掌握这些知识点,能帮助开发者创建出高效、稳定的后台截屏与录屏应用。

    android后台服务运行保持不被干掉。.rar

    这篇内容将详细讲解如何让Android后台服务在各种条件下尽可能地保持运行状态。 首先,理解Android服务生命周期是至关重要的。服务主要包含以下方法: 1. `onCreate()`: 当服务首次创建时调用。 2. `onStartCommand...

    android 后台服务

    【Android 后台服务详解】 Android 后台服务(Service)是Android系统中不可或缺的一部分,它主要用于执行长时间运行的操作,而这些操作通常不需要用户界面。服务的特性使其非常适合处理如音乐播放、定时任务、网络...

    android 后台服务.ppt

    ### Android后台服务详解 #### 一、Service简介 **1.1 Service定义及特点** - **定义**: Service是Android系统中的后台服务组件,主要用于执行长时间运行的任务或操作,如后台音乐播放、数据下载等。 - **特点**:...

    android后台服务例子

    这个“android后台服务例子”很显然是一个演示如何创建和使用Android服务的实例,尤其是涉及到自动执行任务,如定时输出日志和驱动注入代码。 服务的基本概念: 在Android系统中,Service是应用程序的一个组成部分...

    Android后台服务

    Android后台服务,Android后台服务

    第七章android后台服务_电话服务_SMS_MMS.docx

    ### 第七章 Android 后台服务详解:电话服务、SMS 和 MMS #### Service 技术概述 在 Android 应用开发中,Service 是一种重要的组件,它可以在没有用户界面的情况下运行于后台,执行长时间运行的操作,如播放音乐...

    Android代码-android后台服务运行保持不被干掉。.rar

    本压缩包文件“android后台服务运行保持不被干掉”可能包含一种策略或技术,使得服务能在后台更持久地运行,不受系统清理的影响。 首先,我们需要理解Android服务的工作机制。服务可以通过`startService()`启动,...

    安卓Android后台保活服务Demo,多厂商免杀。

    这个“安卓Android后台保活服务Demo”旨在提供一种解决方案,帮助应用在后台持续运行,同时避免被手机厂商的内存清理机制误杀。 一、后台保活服务原理: 在Android系统中,当应用被切换到后台或者用户离开应用时,...

    Xamarin.Android后台服务中的流式音频示例_C#_下载.zip

    这个“Xamarin.Android后台服务中的流式音频示例_C#_下载.zip”压缩包提供了一个使用C#编写的实例,展示了如何在Android应用中实现后台流式音频播放。下面将详细介绍相关知识点: 1. **Xamarin.Android**:Xamarin...

    android后台服务

    本教程将深入探讨如何创建和使用一个简单的Android后台服务——"SimpleRandomServiceDemo"。 首先,我们来看一下"SimpleRandomServiceDemo"这个名字。这可能是一个示例项目,展示了如何创建一个生成随机数的后台...

    第七章android后台服务电话服务SMSMMS.docx

    【Android后台服务】Android系统提供了一种机制,称为Service,用于在后台执行长时间运行的任务,即使用户界面(Activity)已被关闭。Service不直接与用户交互,但可以与应用程序的其他部分进行通信,确保某些功能在...

    第七章android后台服务_电话服务_SMS_MMS-43页.pdf

    Android后台服务是Android系统中一种特殊组件,主要用于在后台执行长时间运行的任务,即使用户与应用的交互界面(Activity)已经关闭。服务不能直接与用户交互,但它可以在后台持续运行,这对于需要持续运行的任务如...

    android c#后台服务代码

    android后台服务代码c#,与android客户端通信,客户端下载地址:http://download.csdn.net/detail/generallizhong/9817304

Global site tag (gtag.js) - Google Analytics