专栏首页水击三千Android Service组件(1)

Android Service组件(1)

android service 和其他服务一样,并没有实际运行的界面,它运行在android 后台。一般通过service为应用程序提供服务(比如,从Internet下载文件,控制音乐播放器等)。Service的生命周期要比activity简单的多,它只有三个阶段(创建服务、开始服务、销毁服务)。下面通过具体事例讲解android的service组件。

1.创建android工程

在Eclipse中创建android工程 android_service_one

2.创建Service

在android工程中,创建包com.example.service,并添加方法MyService。该方法继承与Service。该类用来展示服务的三个生命周期。

package com.example.service;

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

/*
 * 
 */
public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    //第一次打开时调用
    public void onCreate()
    {
        Log.d("MyService", "onCreate");
        super.onCreate();
    }
    //停止时调用
    public void onDestory()
    {
        Log.d("MySerVice", "onDestory");
        super.onDestroy();
    }
    //开始时调用
    public void onStart(Intent intent,int startId)
    {
        Log.d("MyService", "onStart");
        super.onStart(intent, startId);
    }
}

3.调用服务

在android 活动组件中调用刚刚建立的服务,调用之前需要在AndroidManifest.xml中对该服务进行配置。通过<service></service>来配置服务组件。

1   <service android:enabled="true" android:name="com.example.service.MyService"></service>

服务配置完成以后,可以调用该服务。服务与activity之间的交互依然通过Intent来进行通信。启动服务通过startservice(intent),停止服务通过stopservice(Intent intent)来完成。

Intent的声明:Intent Intent=new Intent(this,MyService.class);

 1     public void onClick(View v) {
 2         // TODO Auto-generated method stub
 3         switch(v.getId())
 4         {
 5         case R.id.button1:
 6             startService(serviceintent);
 7             break;
 8         case R.id.button2:
 9             stopService(serviceintent);
10             break;
11         }
12     }

4.Service与Activity绑定

Service与Activity绑定,当Activity启动时,服务自动启动。当Activity被销毁时,服务也被销毁。这里需要在MyService中重写 onBind、onRebind和onUnbind等几个方法。

 1 package com.example.service;
 2 
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7 import android.util.Log;
 8 
 9 /*
10  * 
11  */
12 public class MyService extends Service {
13 
14     private MyBinder myBinder= new MyBinder();
15     
16     @Override
17     //成功绑定时调用该方法
18     public IBinder onBind(Intent intent) {
19         // TODO Auto-generated method stub
20         Log.d("MyService", "onBind");
21         return myBinder;
22     }
23     
24     //重新绑定时调用该方法
25     public void onRebind(Intent intent)
26     {
27         Log.d("MyService", "onRebind");
28         super.onRebind(intent);
29     }
30     
31     //解除绑定时调用该方法
32     public void onUnBind(Intent intent)
33     {
34         Log.d("MyService", "onUnbind");
35         super.onUnbind(intent);
36     }
37     //第一次打开时调用
38     public void onCreate()
39     {
40         Log.d("MyService", "onCreate");
41         super.onCreate();
42     }
43     //停止时调用
44     public void onDestory()
45     {
46         Log.d("MySerVice", "onDestory");
47         super.onDestroy();
48     }
49     //开始时调用
50     public void onStart(Intent intent,int startId)
51     {
52         Log.d("MyService", "onStart");
53         super.onStart(intent, startId);
54     }
55     
56     //绑定类
57     public class MyBinder extends Binder
58     {
59         //返回服务实例
60         public MyService getService()
61         {
62             return MyService.this;
63         }
64     }
65 }

5.调用服务

在Activity中声明服务变量 Myservice myService,和声明ServiceConnection连接变量。绑定变量调用bindService(serviceintent, conn, Context.BIND_AUTO_CREATE);

解除绑定调用,unbindService(ServiceConnection).

 1     Intent serviceintent;
 2     private MyService myService;
 3     private ServiceConnection conn=new ServiceConnection() {
 4         
 5         @Override
 6         public void onServiceDisconnected(ComponentName name) {
 7             // TODO Auto-generated method stub
 8             myService=null;
 9             Toast.makeText(MainActivity.this, "服务连接失败", Toast.LENGTH_LONG).show();
10         }
11         
12         @Override
13         public void onServiceConnected(ComponentName name, IBinder service) {
14             // TODO Auto-generated method stub
15             myService=((MyService.MyBinder)service).getService();
16             Toast.makeText(MainActivity.this, "服务连接成功", Toast.LENGTH_LONG).show();
17         }
18     };

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android学习Tabhost、gallery、listview、imageswitcher

    Tabhost控件又称分页控件,在很多的开发语言中都存在。它可以拥有多个标签页,每个标签页可以拥有不同的内容。android中,一个标签页可以放 一个view或...

    水击三千
  • TimePicker控件、帧动画、补间动画

    1.TimePicker控件 最近感觉每个开发平台的控件基本都差不多,在Android中控件的事件和.net控件直接写事件有一定的区别,net事件可以直接界面进...

    水击三千
  • android 补间动画

    android开发过程中,为了更好的展示应用程序,应用程序添加动画,能够很好地实现这个功能。如果动画中的图像变化有一定的规律,可以采用自动生成图像的方式来生成动...

    水击三千
  • SSM框架(二)Spring的AOP

    代理模式是 AOP(Aspect Oriented Programming 面向切面编程)的核心实现机制。

    HcodeBlogger
  • Java源码阅读绘图规范手册--[捷特版]

    张风捷特烈
  • Visual Studio 2008 每日提示(三十七)

    #371 、从“最近的文件”和“最近的项目”(菜单)移走项 原文链接:How to remove items from the Recent Projects...

    Jianbo
  • python 安全编码&代码审计

    现在一般的web开发框架安全已经做的挺好的了,比如大家常用的django,但是一些不规范的开发方式还是会导致一些常用的安全问题,下面就针对这些常用问题做一些总结...

    py3study
  • Spark入门

    Transformation:进行数据的转换,即将一个RDD转换成另一个RDD,这类转换并不触发提交作业,完成作业中间过程处理。

    俺也想起舞
  • 程序员的10大成功面试技巧

    1.给自己写一份非常专业的简历 老九君的建议是,如果你想增加自己的入选机会,那最好还是花点钱制作一份专业的简历。相较于你将来可能得到的巨大收获,这真的只是一个小...

    老九君
  • 一文搞懂 Linux network namespace

    本文通过 IP 命令操作来简单介绍 network namespace 的基本概念和用法。深入了解可以看看我之前写的两篇文章 Docker 基础技术之 Linu...

    CloudDeveloper

扫码关注云+社区

领取腾讯云代金券