当前位置:操作系统 > 安卓/Android >>

android Service Activity三种交互方式

 

android SDK提供了Service,用于类似*nix守护进程或者windows的服务。

 

Service有两种类型:

 

本地服务(Local Service):用于应用程序内部

远程服务(Remote Sercie):用于android系统内部的应用程序之间

前者用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。

 

后者可被其他应用程序复用,比如天气预报服务,其他应用程序不需要再写这样的服务,调用已有的即可。

 

 

 

编写不需和Activity交互的本地服务示例

本地服务编写比较简单。首先,要创建一个Service类,该类继承android的Service类。这里写了一个计数服务的类,每秒钟为计数器加一。在服务类的内部,还创建了一个线程,用于实现后台执行上述业务逻辑。

 

 

 

 

Java代码 

package com.easymorse;  

 

import android.app.Service;  

import android.content.Intent;  

import android.os.IBinder;  

import android.util.Log;  

 

public class CountService extends Service {  

 

    private boolean threadDisable;  

 

    private int count;  

 

    @Override 

    public IBinder onBind(Intent intent) {  

        return null ;  

    }  

 

    @Override 

    public void onCreate() {  

        super .onCreate();  

        new Thread( new Runnable() {  

 

            @Override 

            public void run() {  

                while ( ! threadDisable) {  

                    try {  

                        Thread.sleep( 1000 );  

                    } catch (InterruptedException e) {  

                    }  

                    count ++ ;  

                    Log.v( " CountService " , " Count is " + count);  

                }  

            }  

        }).start();  

    }  

 

    @Override 

    public void onDestroy() {  

        super .onDestroy();  

        this .threadDisable = true ;  

        Log.v( " CountService " , " on destroy " );  

    }  

 

    public int getCount() {  

        return count;  

    }   

 

}  

 

package com.easymorse;

 

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

import android.util.Log;

 

public class CountService extends Service {

 

    private boolean threadDisable;

 

    private int count;

 

    @Override

    public IBinder onBind(Intent intent) {

        return null ;

    }

 

    @Override

    public void onCreate() {

        super .onCreate();

        new Thread( new Runnable() {

 

            @Override

            public void run() {

                while ( ! threadDisable) {

                    try {

                        Thread.sleep( 1000 );

                    } catch (InterruptedException e) {

                    }

                    count ++ ;

                    Log.v( " CountService " , " Count is " + count);

                }

            }

        }).start();

    }

 

    @Override

    public void onDestroy() {

        super .onDestroy();

        this .threadDisable = true ;

        Log.v( " CountService " , " on destroy " );

    }

 

    public int getCount() {

        return count;

    }

 

}

需要将该服务注册到配置文件AndroidManifest.xml中,否则无法找到:

 

Java代码 

<? xml version="1.0" encoding="utf-8" ?>   

< manifest xmlns:android ="http://schemas.android.com/apk/res/android"   

    package ="com.easymorse" android:versionCode ="1" android:versionName ="1.0" >    

    < application android:icon ="@drawable/icon" android:label ="@string/app_name" >   

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,