Android Service服务——初识

  很抱歉(对我,也是对大家)过了两个星期说好的要发的博客迟迟没有动静,因为最近在与高等数学死磕,同时参加了一个党内的培训,所以现在的学习生活有些紧张,自己的的草稿都堆积了好几篇了,现在我就对于我应朋友之情需要完成一个android的播放器,对于其中的一些简单的要点,写一些自己的感悟。

  首先我要提到的时Android  Service服务,其实我接触到Service这个概念的时间并不长,首先在做这个不能算作工程的东西时,我就想到了,android需要有这样的一个机制,通过一个程序去控制歌曲的播放,同时还有歌词的显示,同时还有歌曲的音量的控制等等,这些都需要在同样的一个界面去完成的,也就是,我需要一个“服务”去默默地帮我控制这些程序的控制和显示,但是却不能影响到我的布局。这样一看确实有点像java的多线程的思想,确实这就是基于android的多线程来实现的。

1.我们要明确“服务”是什么?

我们可以把它简单的想成后台默默的劳动者。当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。

这有一个前提你需要对于线程有一个简单的认识。这里我简单的我把线程的在android使用的方法列举出来:

定义一个线程只需要新建一个类继承自 Thread,然后重写父类的 run()方法,并在里面

编写耗时逻辑即可。比如:

class MyThread extends Thread {

@Override

public void run() {

// 处理具体的逻辑

}

}

创建的线程我们需要在需要的时候将其启动,所以在上面的程序后加上:

new MyThread().start();

但通常在android程序中采用匿名内部类来使用,所以将上面的程序改为:

new Thread(new Runnable() {

@Override

public void run() {

// 处理具体的逻辑

}

}).start();

2.“服务”的基本用法

public class MyService extends Service {

@Override

public IBinder onBind(Intent intent) {

return null;

}

}

在这里我们声明一个MyService类继承Service ,可以看到有唯一的一个抽象方法 onBind()需要重写。但是通常我们在使用服务的工程中需要重写 onCreate()、onStartCommand()和 onDestroy()这几个方法。如下是针对上面的方法声明:

public class MyService extends Service {

@Override

public IBinder onBind(Intent intent) {

return null;

}

@Override

public void onCreate() {

super.onCreate();

}

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

return super.onStartCommand(intent, flags, startId);

}

@Override

public void onDestroy() {

super.onDestroy();

}

}

剩下的只需要在 AndroidManifest.xml文件中进行注册就可以了。

可以发现这样我们就已经启动了服务,但是这样启动的服务我们并不能进行控制什么时候进行输入和输出,这样我们就要考虑将activity和service联系起来,同时加入一些控制。(在下面的程序中我在布局文件中加入了两个按钮),同时通过打印显示服务的状态信息。同时我们需要将服务与活动在程序运行时进行绑定,还有运行后解除绑定。这时我们需要在上面程序的基础上更加明细一些方法的作用,通过这些方法去完成。

同样我们先写一个MyService服务去继承Service,然后去重写相应的方法,不过这次需要写一个 Binder类对象,通过Binder才能完成activity和service的绑定。

public class MyService extends Service {

private DownloadBinder mBinder = new DownloadBinder();

class DownloadBinder extends Binder {

public void startDownload() {

Log.d("MyService", "startDownload executed");

}

public int getProgress() {

Log.d("MyService", "getProgress executed");

return 0;

}

}

@Override

public IBinder onBind(Intent intent) {

return mBinder;

}

}

下面就在绑定活动和服务的基础上调用binder的方法了。

public class MainActivity extends Activity implements OnClickListener {

private Button startService;

private Button stopService;

private Button bindService;

private Button unbindService;

private MyService.DownloadBinder downloadBinder;

private ServiceConnection connection = new ServiceConnection() {

@Override

public void onServiceDisconnected(ComponentName name) {

}

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

downloadBinder = (MyService.DownloadBinder) service;

downloadBinder.startDownload();

downloadBinder.getProgress();

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

bindService = (Button) findViewById(R.id.bind_service);

unbindService = (Button) findViewById(R.id.unbind_service);

bindService.setOnClickListener(this);

unbindService.setOnClickListener(this);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.bind_service:

Intent bindIntent = new Intent(this, MyService.class);

bindService(bindIntent, connection, BIND_AUTO_CREATE); //  绑定服务

break;

case R.id.unbind_service:

unbindService(connection); //  解绑服务

break;

default:

break;

}

}

}

同样作为和活动有同样地位的服务也有自己的生命周期,这里就不一一阐述了。

  日进一小步,月过一大步~~加油!!

时间: 2025-01-17 16:12:41

Android Service服务——初识的相关文章

Android Service服务-(转)

Service是Android系统中提供的四大组件之一.它是运行在后台的一种服务,一般声明周期较长,不直接与用户进行交互. 服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务.这两个方法都可以启动Service,但是它们的使用场合有所不同.    1. 使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行.    如果打算采用Context.startService(

Android Service 服务(三)—— bindService与remoteService

(转自:http://blog.csdn.net/ithomer/article/details/7366396)   一.bindService简介 bindService是绑定Service服务,执行service服务中的逻辑流程. service通过Context.startService()方法开始,通过Context.stopService()方法停止:也可以通过Service.stopSelf()方法或者Service.stopSelfResult()方法来停止自己.只要调用一次st

Android Service 服务(一)—— Service

一. Service简单介绍 Service是android 系统中的四大组件之中的一个(Activity.Service.BroadcastReceiver.ContentProvider),它跟Activity的级别差点儿相同,但不能自己执行仅仅能后台执行,而且能够和其它组件进行交互.service能够在非常多场合的应用中使用,比方播放多媒体的时候用户启动了其它Activity这个时候程序要在后台继续播放,比方检測SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务总是藏在

Android service 服务

Android的服务: 1:已启动方式: startService()和bindService(): startService:启动后,如果Activity关闭了,服务依然运行,除非stopService: bindService:创建开启服务器,但是在程序关闭的时候,会自动关闭服务: 通过ServiceConnectionjava接口获取service的IBinder接口: 2:控制服务(绑定服务): (1)但是上述两个方式都是通过Intent创建启动服务的,没有通过new,所以没有直接控制s

Android Service 服务(二)—— BroadcastReceiver

(转自:http://blog.csdn.net/ithomer/article/details/7365147) 一. BroadcastReceiver简介 BroadcastReceiver,用于异步接收广播Intent,广播Intent是通过调用Context.sendBroadcast()发送.BroadcastReceiver()接收. 广播Intent的发送是通过调用Context.sendBroadcast().Context.sendOrderedBroadcast().Con

android Service服务简介(一)

作为android的四大组件之一,服务也少不了很多重要的知识点.下面我们从最基本的开始学习. 1.1服务的创建 首先创建一个ServiceTest类继承Service.我们会重写onCreate(),onStartCommand()和onDestory()三个方法,他们是每个服务中最常用到的方法.其中onCreate方法会在服务创建的时候调用,onStartCommand方法会在每次服务启动的时候调用,onDestory方法会在服务销毁的时候调用.通常情况下,如果我们希望服务一旦启动就立刻去执行

从零开始学android<Service服务.四十三.>

在Android系统开发之中,Services是一个重要的组成部分.如果现在某些程序需要中的部分操作是很消耗时间的,那么可以将这些程序定义在Service之中,这样就可以完成程序的后台运行(也可以在不显示界面的形式下运行),即:Services实际上就相当于是一个没有图形界面的Activity程序,而且当用户要执行某些操作需要进行跨进程访问的时候也可以使用Service来完成. Service是一个没有UI界面的操作组件,主要的功能是为Activity程序提供一些必要的支持,例如:手机中的Mp3

android Service服务(二)

1.1 活动和服务进行通信 上一节中我们学习了启动和停止服务的方法.不知道你又没有发现,虽然服务是在活动里启动的,但在启动了服务之后,活动和服务基本上就没关系了,确实如此,我们在活动里调用了startService()方法来启动myService这个服务,然后MyService的onCreate()和onStartCommand()方法就会得到执行.之后服务一直处于运行状态,但具体运行的是什么逻辑,活动就控制不了了.这就类似于活动通知了服务一下:'你可以启动了!' 然后服务就去忙自己的事情了,但

Android service 服务的应用之电话监听器以及短信监听器

首先建立一个项目工程文件,如下图所示: 首先在MainActivity.java文件启动电话和短信的界面,代码如下 1 package com.xunfang.wiretap; 2 3 import com.xunfang.observer.MyObserver; 4 import com.xunfang.services.PhoneService; 5 6 import android.support.v7.app.ActionBarActivity; 7 import android.con