您的位置:首页 > 移动开发 > Android开发

Android 服务(service)的基础用法

2018-02-05 11:31 387 查看
作为Android四大组件之一,服务(service)也是非常重要的知识点,先来看一下如何定义一个服务,比如新建了一个ServiceTest项目,然后右击com.example.servicetest-->Service-->Service,就会看到如下窗口:



可以看到,这里我们将服务命名为MyService,Exported属性表示是否允许除了当前程序之外的其他程序访问这个服务,Enabled属性表示是否启用这个服务,将这两个属性都勾上,点击Finish完成创建.

现在观察MyService中的代码,如下:

public class MyService extends Service {
public MyService() {
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
}

可以看到,MyService是继承自Service类的,说明这是一个服务,目前MyService中可以算是空空如也,但有个onBind()方法特别醒目,这个方法是Service中唯一的一个抽象的方法,所以必须要在子类里实现.

既然是定义一个服务,自然应该在服务中无处理一些事情了,那处理事情的逻辑应该写在哪里呢?这时可以重写Service中的另外一些方法了,如下:

public class MyService extends Service {
...

@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();
}
}

可以看到,这里我们又重写了onCreate(),onStartCommand(),onDestroy()这3个方法,它们是每个服务中最常用到的3个方法了,其中onCreate()方法会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候调用.

通常情况下,如果我们希望服务一旦启动就立刻去执行某个动作,就可以将逻辑写在onStartCommand()方法里,而当服务销毁时,我们又应该在onDestroy()方法中去回收那些不再使用的资源.

另外需要注意,每一个服务都需要在AndroidManifest.xml文件中进行注册才能生效,这已经是Android四大组件共有的特点,不过在我们创建MyService的时候,Android Studio早就已经自动棒我们将这一步完成了,打开AndroidManifest.xml文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.servicetest">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
</application>

</manifest>

这样的话,就已经将一个服务完全定义好了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: