`

Android提高第五篇之Service[转]

 
阅读更多

 

       上次介绍了Activity以及Intent的使用,这次就介绍Service,如果把Activity比喻为前台程序,那么Service就是后台程序,Service的整个生命周期都只会在后台执行。Service跟Activity一样也由Intent调用。在工程里想要添加一个Service,先新建继承Service的类,然后到AndroidManifest.xml -> Application ->Application Nodes中的Service标签中添加。

         Service要由Activity通过startService 或者 bindService来启动,Intent负责传递参数。先贴出本文程序运行截图:

 

本文主要讲解Service的调用,以及其生命周期。

上图是startService之后再stopService的Service状态变化。

上图是bindService之后再unbindService的Service状态变化。

       startService与bindService都可以启动Service,那么它们之间有什么区别呢?它们两者的区别就是使Service的周期改变。由startService启动的Service必须要有stopService来结束Service,不调用stopService则会造成Activity结束了而Service还运行着。bindService启动的Service可以由unbindService来结束,也可以在Activity结束之后(onDestroy)自动结束。

 上图是startService之后再Activity.finish()的Service状态变化,Service还在跑着。

上图是bindService之后再Activity.finish()的Service状态变化,Service最后自动unbindService。

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">  
    <Button android:layout_width="wrap_content"  
        android:layout_height="wrap_content" android:id="@+id/btnStartMyService"  
        android:text="StartMyService"></Button>  
    <Button android:layout_width="wrap_content"  
        android:layout_height="wrap_content" android:id="@+id/btnStopMyService"  
        android:text="StopMyService"></Button>  
    <Button android:layout_width="wrap_content"  
        android:layout_height="wrap_content" android:id="@+id/btnBindMyService"  
        android:text="BindMyService"></Button>  
    <Button android:layout_width="wrap_content"  
        android:layout_height="wrap_content" android:id="@+id/btnUnbindMyService"  
        android:text="UnbindMyService"></Button>  
    <Button android:layout_width="wrap_content"  
        android:layout_height="wrap_content" android:id="@+id/btnExit"  
        android:text="退出程序"></Button>  
</LinearLayout> 

 

 

testService.java的源码:

 

 

package com.testService;  
  
import android.app.Activity;  
import android.app.Service;  
import android.content.ComponentName;  
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.widget.Button;  
  
public class testService extends Activity {  
    Button btnStartMyService,btnStopMyService,btnBindMyService,btnUnbindMyService,btnExit;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        btnStartMyService=(Button)this.findViewById(R.id.btnStartMyService);  
        btnStartMyService.setOnClickListener(new ClickEvent());  
          
        btnStopMyService=(Button)this.findViewById(R.id.btnStopMyService);  
        btnStopMyService.setOnClickListener(new ClickEvent());  
          
        btnBindMyService=(Button)this.findViewById(R.id.btnBindMyService);  
        btnBindMyService.setOnClickListener(new ClickEvent());  
          
        btnUnbindMyService=(Button)this.findViewById(R.id.btnUnbindMyService);  
        btnUnbindMyService.setOnClickListener(new ClickEvent());   
          
        btnExit=(Button)this.findViewById(R.id.btnExit);  
        btnExit.setOnClickListener(new ClickEvent());  
    }  
    @Override  
    public void onDestroy()  
    {  
        super.onDestroy();  
        Log.e("Activity","onDestroy");  
    }  
      
    private ServiceConnection _connection = new ServiceConnection() {    
        @Override  
        public void onServiceConnected(ComponentName arg0, IBinder arg1) {  
            // TODO Auto-generated method stub  
        }  
  
        @Override  
        public void onServiceDisconnected(ComponentName name) {  
            // TODO Auto-generated method stub  
        }    
    };    
    class ClickEvent implements View.OnClickListener{  
  
        @Override  
        public void onClick(View v) {  
            Intent intent=new Intent(testService.this,MyService.class);  
            if(v==btnStartMyService){  
                testService.this.startService(intent);  
            }  
            else if(v==btnStopMyService){  
                testService.this.stopService(intent);  
            }  
            else if(v==btnBindMyService){  
                testService.this.bindService(intent, _connection, Service.BIND_AUTO_CREATE);  
            }  
            else if(v==btnUnbindMyService){  
                if(MyService.ServiceState=="onBind")//Service绑定了之后才能解绑  
                    testService.this.unbindService(_connection);  
            }  
            else if(v==btnExit)  
            {  
                testService.this.finish();  
            }  
              
        }  
          
    }  
}

 

 

MyService.java的源码:

 

package com.testService;  
  
import android.app.Service;  
import android.content.Intent;  
import android.os.IBinder;  
import android.util.Log;  
  
public class MyService extends Service {  
    static public String ServiceState="";  
    @Override  
    public IBinder onBind(Intent arg0) {  
        Log.e("Service", "onBind");  
        ServiceState="onBind";  
        return null;  
    }  
    @Override  
    public boolean onUnbind(Intent intent){  
        super.onUnbind(intent);  
        Log.e("Service", "onUnbind");  
        ServiceState="onUnbind";  
        return false;  
          
    }  
    @Override  
    public void onCreate(){  
        super.onCreate();  
        Log.e("Service", "onCreate");  
        ServiceState="onCreate";  
    }  
    @Override  
    public void onDestroy(){  
        super.onDestroy();  
        Log.e("Service", "onDestroy");  
        ServiceState="onDestroy";  
    }  
    @Override  
    public void onStart(Intent intent,int startid){  
        super.onStart(intent, startid);  
        Log.e("Service", "onStart");  
        ServiceState="onStart";  
    }  
  
}

 

本文来自http://blog.csdn.net/hellogv/article/details/5994952

分享到:
评论

相关推荐

    Android提高第五篇之Service.docx

    Android提高第五篇之Service.docx

    Android应用开发详解

    第5章 Android基本程序单元Activity Android 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容 第6章 Android组件之间的信使Intent Android 组件之间的信使Intent,讲述了...

    android应用开发详解 郭宏志编著 pdf格式

    第五章 android基本程序单元Activity 第六章 android组件之间的信使Intent 第七章 android Service组件 第八章 android广播事件处理Broadcast Receiver 第九章 android中的数据存取 第十章 Content Provider 第十一...

    指尖疯Android4.4视频第16集:Service

    提到Service,疯兄脑海里不由自主的冒出五个大字:为人民服务。。。谁让疯兄是从那个年代过来的呢?不过Service可真为Android任劳任怨且从不邀功的劳模!只干活不显摆,只付出不求回报的幕后英雄。如果你设计出的APP...

    Android系统源代码情景分析 / 罗升阳著

    第5章 Binder进程间通信系统 第6章 Ashmem匿名共享内存系统 第7章 Activity组件的启动过程 第8章 Service组件的启动过程 第9章 Android系统广播机制 第10章 Content Provider组件的实现原理 第11章 Zygote...

    《Android应用开发详解》源码_文档讲解

    Android概述 第2章 Android开发基础 第3章 Android中的资源访问 第4章 Android用户界面 第5章 Android基本程序单元Activity 第6章 Android组件之间的信使Intent 第7章 Android Service组件 第8章 Android广播事件...

    疯狂Android讲义 第三版

    全书内容覆盖了Android用户界面编程、Android四大组件、Android资源访问、图形/图像处理、事件处理机制、Android输入/输出处理、音频/视频多媒体应用开发、OpenGL与3D应用开发、网络通信编程、Android平台的Web ...

    Android高薪之路:Android程序员面试宝典 李宁

    第5章 文件存储 5 1 SharedPreferences 5 2 流文件 5 3 XML存储 5 4 JSON存储 第6章 数据库 6 1 SQLite基础知识 6 2 SQLite 函数 6 2 1 核心函数 6 2 2 日期和时间函数 6 2 3 聚合函数 6 3 在Android中使用SQLite 6 ...

    疯狂Android讲义源代码2

    第5章 使用Intent和IntentFilter进行通信 第6章 Android应用的资源 第7章 图形与图像处理 第8章 Android的数据存储和IO 第9章 使用ContentProvider实现数据共享 第10章 Service与Broadcast Receiver 第11章 多媒体...

    Android代码-android-advanced-decode

    第5章从源码角度分析上下文Context。 第6章介绍ActivityManagerService,包括AMS家族、AMS的启动过程、AMS重要的数据结构和Activity栈管理等内容。 第7章介绍WindowManager,包括WindowManager的关联类、Window的...

    Android应用开发详解pdf.pdf

     第5章 Android基本程序单元ActivityAndroid 基本程序单元Activity,讲述了Android中重要组件Activity的创建、启动和生命周期等内容  续表  篇 名章 名内容简介  第二篇 技术篇第6章 Android组件之间的信使...

    《Android开发案例驱动教程》

    第5章 UI基础控件 79 第6章 UI高级控件 105 第7章 UI布局 151 第8章 多线程 189 第9章 Activity和Intent 219 第10章 Android数据存储 248 第11章 Content Provider 302 第12章 多媒体开发 341 第13章 Service 385 第...

    《Android开发权威指南》 PDF (安卓sdk 2.3)

    第二部分 基础篇,包括第3章~第16章,第3章 Android程序设计基础、第4章 用户界面开发基础、第5章 控件(Widget)详解、第6章 菜单、第7章 信息提醒(对话框、Toast与Notification)、第8章 数据存储、第9章 Android...

    《Google Android开发入门与实战》

    第5章 千里之行始于足下——第一个应用HelloWorld 第7章 良好的学习开端——Android基本组件介绍之我的美丽我做主——Android中应用界面布局 第7章 良好的学习开端——Android基本组件介绍之不积跬步无以至千里——...

    《Android开发案例驱动教程》源码

    第5章 UI基础控件 79 第6章 UI高级控件 105 第7章 UI布局 151 第8章 多线程 189 第9章 Activity和Intent 219 第10章 Android数据存储 248 第11章 Content Provider 302 第12章 多媒体开发 341 第13章 Service 385 第...

    Android实验五.doc

    计算机科学与技术系 实 验 报 告 专业名称 计算机科学与技术 课程名称 Android嵌入式软件开发 项目名称 Service 后台服务 班 级 计科... Android实验五全文共6页,当前为第5页。 Android实验五全文共6页,当前为第6页。

    Android开发权威指南

    , 第二部分 基础篇,包括第3章~第16章,第3章 Android程序设计基础、第4章 用户界面开发基础、第5章 控件(Widget)详解、第6章 菜单、第7章 信息提醒(对话框、Toast与Notification)、第8章 数据存储、第9章 ...

    android一步一步最基础学习__新手

    第五讲:用户界面 View(一) FrameLayout, LinearLayout 第六讲:用户界面 View(二) AbsoluteLayout,RelativeLayout 第七讲:用户界面 View(三) TableLayout 第八讲:Intent入门指南 Intent 第九讲:用户...

    《Android视频教程》概述 Android视频教程简介

    普及android开发知识,全教程分八部分: 第一讲Android系统简介 第二讲建立Android开发环境 第三讲第一个Android应用 ...第五讲Intent与Activity 第六讲Activity生命周期 第七讲使用Service 第八讲Content Provider

Global site tag (gtag.js) - Google Analytics