android bind_debug_unbind 作用,Android中service开发总结

本文介绍了Android中Service的使用。阐述了使用Service的原因,即它所属进程优先级高,不易被系统清理,适合长期运行的任务。还说明了创建Service的步骤、服务类的重要方法,以及Service的两种调用方法:startService和bindService,并给出了相关注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、为什么要使用service?

在我们开发的应用中,有的时候需要做一些长期运行的任务,比如下载文件、音乐播放器、闹钟或者邮件程序等。由于Android系统会根据系统资源使用情况自动清理闲置的后台程序,所以普通的Activity程序在运行一段时间后就有可能被系统清理掉,不能达到长期运行的效果。而包含service的进程属于优先权比较高的(关于进程的生命周期相关知识请点击这里查看)不容易被系统清理掉,所以对那些应用来说,选择service是必要的。

2、创建一个Service

在工程节点或者包节点上右键,选择”New->Class”,输入包名,类名称,SuperClass输入或者选择android.app.Service,点击ok,创建一个服务类成功,创建完成后初始化代码如下:

Java

import android.app.Service;

import android.content.Intent;

import android.os.IBinder;

public class TestService extends Service {

@Override

public IBinder onBind(Intent intent) {

// TODO Auto-generated method stub

return null;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

importandroid.app.Service;

importandroid.content.Intent;

importandroid.os.IBinder;

publicclassTestServiceextendsService{

@Override

publicIBinderonBind(Intentintent){

// TODO Auto-generated method stub

returnnull;

}

}

创建完成后还无法使用此服务,需要在AndroidManifestXml中声明该服务类,示例如下:

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MainActivity"

android:label="@string/app_name" >

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme">

android:name=".MainActivity"

android:label="@string/app_name">

3、服务类的一些重要方法

Return the application that owns this service.

Intent intent)

Return the communication channel to the service.

Configuration newConfig)

Called by the system when the device configuration changes while your component is running.

Called by the system when the service is first created.

Called by the system to notify a Service that it is no longer used and is being removed.

This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.

Intent intent)

Called when new clients have connected to the service, after it had previously been notified that all had disconnected in its

Intent intent, int startId)

This method was deprecated in API level 5. Implement

Intent intent, int flags, int startId)

Called by the system every time a client explicitly starts the service by calling

Intent rootIntent)

This is called if the service is currently running and the user has removed a task that comes from the service’s application.

Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.

Intent intent)

Called when all clients have disconnected from a particular interface published by the service.

Notification notification)

Make this service run in the foreground, supplying the ongoing notification to be shown to the user while in this state.

Remove this service from foreground state, allowing it to be killed if more memory is needed.

Stop the service, if it was previously started.

Old version of

Stop the service if the most recent time it was started was startId.

4、Service的调用方法

Service可能通过两种方法启动,一种是通过startService另外一种是通过bindService

1) startServie的声明如下:public abstract ComponentName startService (Intent service)

参数说明:service是你要启动的服务对象,通过Intent构造,你可以在Intent对象中加入其他需要的参数,以在服务中使用。执行此函数后,如果服务未启动则系统会创建此服务并执行,如果执行此函数时服务已经在运行,则服务会继续执行。

Java

Intent servicentent = new Intent(this, CloudNoteService.class);

//servicentent.putExtra("MusicFile", "")

this.startService(servicentent);

1

2

3

Intentservicentent=newIntent(this,CloudNoteService.class);

//servicentent.putExtra("MusicFile", "")

this.startService(servicentent);

每次调用startService时都会触发服务内的android.app.Service.onStartCommand方法,此机制提供一个方便的方法通过Intent参数传入一些需要的参数,以避免必须再使用BindService才能实现的功能。

终止由startService启动的服务方法:一种是可以在服务内部调用stopSelf()来停止服务,另一种是在调用startService的context中通过调用stopService来终止

2) bindService声明如下:public abstract boolean bindService (Intent service, ServiceConnection conn, int flags)

参数说明:

service: 是要绑定的服务的实例标识,

conn: 用于接收成功绑定或者结束绑定时的通知,在连接时可以接收service返回的对象,

flags: 为绑定选项,可能为0, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_NOT_FOREGROUND, BIND_ABOVE_CLIENT, BIND_ALLOW_OOM_MANAGEMENT, BIND_WAIVE_PRIORITY.

对于由startService启动的服务,也可以使用此函数进行绑定。如果服务没有启动,可以设置flags为BIND_AUTO_CREATE,这样执行此函数时服务会被自动创建。

只有当调用该服务存在的时候系统才认为该服务有必须继续执行代码,比如当调用该服务的Activity停止或者销毁后它绑定的服务也会停止工作。所以在执行长期操作的时候不要在bindService中执行,即不要在Service的onbind函数中启动相应的定时器,否则当activity结束后,该定时器也会不再执行工作,而应该先用startService启动服务,并在服务的onStartCommand中执行定时器操作。

注意:

1、在使用一个service前必须在AndroidManifest.xml中定义该服务类名称,如:

打赏

f69872ab5631b766bfb8c62b6b7d28fa.png微信扫一扫,打赏作者吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值